chef-licensing 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/chef-licensing.gemspec +4 -3
- data/lib/chef-licensing/api/client.rb +1 -1
- data/lib/chef-licensing/api/describe.rb +1 -1
- data/lib/chef-licensing/api/license_feature_entitlement.rb +1 -1
- data/lib/chef-licensing/api/license_software_entitlement.rb +1 -1
- data/lib/chef-licensing/api/list_licenses.rb +1 -1
- data/lib/chef-licensing/api/parser/client.rb +1 -1
- data/lib/chef-licensing/api/parser/describe.rb +1 -1
- data/lib/chef-licensing/exceptions/client_error.rb +1 -1
- data/lib/chef-licensing/exceptions/describe_error.rb +1 -1
- data/lib/chef-licensing/exceptions/error.rb +1 -1
- data/lib/chef-licensing/exceptions/invalid_file_format_version.rb +0 -1
- data/lib/chef-licensing/exceptions/invalid_license.rb +0 -1
- data/lib/chef-licensing/exceptions/list_licenses_error.rb +1 -1
- data/lib/chef-licensing/exceptions/missing_api_credentials_error.rb +1 -1
- data/lib/chef-licensing/exceptions/software_not_entitled.rb +1 -1
- data/lib/chef-licensing/license.rb +8 -12
- data/lib/chef-licensing/license_key_fetcher/file.rb +1 -1
- data/lib/chef-licensing/license_key_fetcher.rb +1 -1
- data/lib/chef-licensing/license_key_validator.rb +1 -1
- data/lib/chef-licensing/list_license_keys.rb +11 -9
- data/lib/chef-licensing/pstore_adapter.rb +36 -0
- data/lib/chef-licensing/restful_client/base.rb +3 -2
- data/lib/chef-licensing/restful_client/v1.rb +1 -1
- data/lib/chef-licensing/string_refinements.rb +25 -0
- data/lib/chef-licensing/tui_engine.rb +1 -1
- data/lib/chef-licensing/version.rb +1 -1
- data/lib/chef-licensing.rb +1 -1
- metadata +21 -11
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b35b9075f13075e463a2db5db81b9d251333660b72a4f7dff2e1f00f16c1761c
|
|
4
|
+
data.tar.gz: a3e97bdd083ff58a06c0056d3d06503a79222f39e788d58a468d74a2e5492cb6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6ae4578953b54784282f50d2f688e3fce57b9ab07f0544620070e42ad8dee26cb71608d0a91432167ada76e1dd098e14d1a92f7148614fabc7cf837f7ced4d4d
|
|
7
|
+
data.tar.gz: 31ae1f7f4c610fb21b1be1453ddabc6a1645221ad82f6e83406619d675ebac0bf80a42991f8c0e890e2e0a52fbbe908caa35bf4405f913432e6b503a879fd676
|
data/chef-licensing.gemspec
CHANGED
|
@@ -19,8 +19,8 @@ Gem::Specification.new do |spec|
|
|
|
19
19
|
|
|
20
20
|
# Specify which files should be added to the gem when it is released.
|
|
21
21
|
spec.files =
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
Dir.glob("{{lib,etc}/**/*,LICENSE,chef-licensing.gemspec}")
|
|
23
|
+
.reject { |f| File.directory?(f) }
|
|
24
24
|
|
|
25
25
|
spec.bindir = "exe"
|
|
26
26
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
@@ -30,10 +30,11 @@ Gem::Specification.new do |spec|
|
|
|
30
30
|
spec.add_dependency "tty-prompt", "~> 0.23"
|
|
31
31
|
spec.add_dependency "faraday", ">= 1", "< 2"
|
|
32
32
|
spec.add_dependency "faraday-http-cache"
|
|
33
|
-
spec.add_dependency "
|
|
33
|
+
spec.add_dependency "faraday_middleware", "~> 1.0"
|
|
34
34
|
spec.add_dependency "tty-spinner", "~> 0.9.3"
|
|
35
35
|
spec.add_dependency "mixlib-log", "~> 3.0"
|
|
36
36
|
|
|
37
37
|
# Gem dependency needed with Ruby 3.4 upgrade
|
|
38
38
|
spec.add_dependency "ostruct", "~> 0.1.0"
|
|
39
|
+
spec.add_dependency "pstore", "~> 0.1.1"
|
|
39
40
|
end
|
|
@@ -35,10 +35,9 @@ module ChefLicensing
|
|
|
35
35
|
def feature_entitlements
|
|
36
36
|
return @feature_entitlements unless @feature_entitlements.empty?
|
|
37
37
|
|
|
38
|
-
feat_entitlements = []
|
|
39
38
|
feat_entitlements_data = @parser.parse_feature_entitlements
|
|
40
|
-
feat_entitlements_data.
|
|
41
|
-
|
|
39
|
+
feat_entitlements = feat_entitlements_data.map do |data|
|
|
40
|
+
FeatureEntitlement.new(data)
|
|
42
41
|
end
|
|
43
42
|
@feature_entitlements = feat_entitlements
|
|
44
43
|
end
|
|
@@ -46,10 +45,9 @@ module ChefLicensing
|
|
|
46
45
|
def software_entitlements
|
|
47
46
|
return @software_entitlements unless @software_entitlements.empty?
|
|
48
47
|
|
|
49
|
-
sw_entitlements = []
|
|
50
48
|
sw_entitlements_data = @parser.parse_software_entitlements
|
|
51
|
-
sw_entitlements_data.
|
|
52
|
-
|
|
49
|
+
sw_entitlements = sw_entitlements_data.map do |data|
|
|
50
|
+
SoftwareEntitlement.new(data)
|
|
53
51
|
end
|
|
54
52
|
@software_entitlements = sw_entitlements
|
|
55
53
|
end
|
|
@@ -57,10 +55,9 @@ module ChefLicensing
|
|
|
57
55
|
def asset_entitlements
|
|
58
56
|
return @asset_entitlements unless @asset_entitlements.empty?
|
|
59
57
|
|
|
60
|
-
asset_entitlements = []
|
|
61
58
|
asset_entitlements_data = @parser.parse_asset_entitlements
|
|
62
|
-
asset_entitlements_data.
|
|
63
|
-
|
|
59
|
+
asset_entitlements = asset_entitlements_data.map do |data|
|
|
60
|
+
AssetEntitlement.new(data)
|
|
64
61
|
end
|
|
65
62
|
@asset_entitlements = asset_entitlements
|
|
66
63
|
end
|
|
@@ -68,10 +65,9 @@ module ChefLicensing
|
|
|
68
65
|
def limits
|
|
69
66
|
return @limits unless @limits.empty?
|
|
70
67
|
|
|
71
|
-
limits = []
|
|
72
68
|
limits_data = @parser.parse_limits
|
|
73
|
-
limits_data.
|
|
74
|
-
|
|
69
|
+
limits = limits_data.map do |data|
|
|
70
|
+
Limit.new(data, { product_name: @product_name })
|
|
75
71
|
end
|
|
76
72
|
@limits = limits
|
|
77
73
|
end
|
|
@@ -228,7 +228,7 @@ module ChefLicensing
|
|
|
228
228
|
return nil unless path
|
|
229
229
|
|
|
230
230
|
# only checking for major version for file format for breaking changes
|
|
231
|
-
@contents ||= YAML.
|
|
231
|
+
@contents ||= YAML.load_file(path)
|
|
232
232
|
|
|
233
233
|
# raise error if the file_format_version key is missing
|
|
234
234
|
raise LicenseFileCorrupted.new("Unrecognized license file; :file_format_version missing.") unless @contents.key?(:file_format_version)
|
|
@@ -254,7 +254,7 @@ module ChefLicensing
|
|
|
254
254
|
def validate_and_fetch_license_type(new_keys)
|
|
255
255
|
unless new_keys.empty?
|
|
256
256
|
is_valid = validate_license_key(new_keys.first)
|
|
257
|
-
|
|
257
|
+
get_license_type(new_keys.first) if is_valid
|
|
258
258
|
end
|
|
259
259
|
end
|
|
260
260
|
|
|
@@ -3,9 +3,11 @@ require_relative "api/describe"
|
|
|
3
3
|
require_relative "exceptions/describe_error"
|
|
4
4
|
require "pastel" unless defined?(Pastel)
|
|
5
5
|
require_relative "config"
|
|
6
|
+
require_relative "string_refinements"
|
|
6
7
|
|
|
7
8
|
module ChefLicensing
|
|
8
9
|
class ListLicenseKeys
|
|
10
|
+
using StringRefinements
|
|
9
11
|
def self.display(opts = {})
|
|
10
12
|
new(opts).display
|
|
11
13
|
end
|
|
@@ -69,20 +71,20 @@ module ChefLicensing
|
|
|
69
71
|
else
|
|
70
72
|
# find the number of days left for the license to expire
|
|
71
73
|
days = (Date.parse(license.expiration_date) - Date.today).to_i
|
|
72
|
-
"#{days
|
|
74
|
+
"#{[days, 0].max} #{"Day".pluralize(days)}"
|
|
73
75
|
end
|
|
74
76
|
num_of_units = license.limits&.first&.usage_limit || 0
|
|
75
77
|
num_of_units = num_of_units == -1 ? "Unlimited" : num_of_units
|
|
76
78
|
unit_measure = license.limits&.first&.usage_measure || "unit"
|
|
77
79
|
output.puts <<~LICENSE
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
80
|
+
#{pastel.bold("License Details")}
|
|
81
|
+
Asset Name : #{license.limits.first.software}
|
|
82
|
+
License ID : #{license.id}
|
|
83
|
+
Type : #{license_type}
|
|
84
|
+
Status : #{license.status.capitalize}
|
|
85
|
+
Validity : #{validity}
|
|
86
|
+
No. Of Units : #{num_of_units} #{unit_measure.capitalize.pluralize(num_of_units)}
|
|
87
|
+
------------------------------------------------------------
|
|
86
88
|
LICENSE
|
|
87
89
|
end
|
|
88
90
|
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require "pstore"
|
|
2
|
+
|
|
3
|
+
module ChefLicensing
|
|
4
|
+
# Simple adapter to make PStore compatible with Faraday::HttpCache
|
|
5
|
+
class PStoreAdapter
|
|
6
|
+
def initialize(cache_dir)
|
|
7
|
+
@store_path = File.join(cache_dir, "chef_licensing_cache.pstore")
|
|
8
|
+
@store = PStore.new(@store_path)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Interface methods required by faraday-http-cache
|
|
12
|
+
def read(key)
|
|
13
|
+
@store.transaction { @store[key] }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def write(key, value, options = {})
|
|
17
|
+
# PStore handles persistence, Faraday::HttpCache handles
|
|
18
|
+
# HTTP cache headers for expiration
|
|
19
|
+
@store.transaction { @store[key] = value }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def delete(key)
|
|
23
|
+
@store.transaction { @store.delete(key) }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def exist?(key)
|
|
27
|
+
@store.transaction { @store.root?(key) }
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def clear
|
|
31
|
+
@store.transaction do
|
|
32
|
+
@store.roots.each { |root| @store.delete(root) }
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
require "faraday" unless defined?(Faraday)
|
|
2
|
+
require "faraday_middleware"
|
|
2
3
|
require "faraday/http_cache"
|
|
3
|
-
require "active_support"
|
|
4
4
|
require "tmpdir" unless defined?(Dir.mktmpdir)
|
|
5
5
|
require_relative "../exceptions/restful_client_error"
|
|
6
6
|
require_relative "../exceptions/restful_client_connection_error"
|
|
7
7
|
require_relative "../exceptions/missing_api_credentials_error"
|
|
8
8
|
require_relative "../config"
|
|
9
|
+
require_relative "../pstore_adapter"
|
|
9
10
|
require_relative "middleware/exceptions_handler"
|
|
10
11
|
require_relative "middleware/content_type_validator"
|
|
11
12
|
|
|
@@ -132,7 +133,7 @@ module ChefLicensing
|
|
|
132
133
|
end
|
|
133
134
|
|
|
134
135
|
def get_connection(url = nil)
|
|
135
|
-
store =
|
|
136
|
+
store = PStoreAdapter.new(Dir.tmpdir)
|
|
136
137
|
Faraday.new(url: url) do |config|
|
|
137
138
|
config.request :json
|
|
138
139
|
config.response :json, parser_options: { object_class: OpenStruct }
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module ChefLicensing
|
|
2
|
+
# String refinements to provide pluralization functionality
|
|
3
|
+
# Replaces ActiveSupport::Inflector for our specific use case
|
|
4
|
+
module StringRefinements
|
|
5
|
+
refine String do
|
|
6
|
+
def pluralize(count = 2)
|
|
7
|
+
return self if count == 1
|
|
8
|
+
|
|
9
|
+
# Simple pluralization rules
|
|
10
|
+
case downcase
|
|
11
|
+
when /s$/, /sh$/, /ch$/, /x$/, /z$/
|
|
12
|
+
"#{self}es"
|
|
13
|
+
when /[^aeiou]y$/
|
|
14
|
+
"#{self[0..-2]}ies"
|
|
15
|
+
when /f$/
|
|
16
|
+
"#{self[0..-2]}ves"
|
|
17
|
+
when /fe$/
|
|
18
|
+
"#{self[0..-3]}ves"
|
|
19
|
+
else
|
|
20
|
+
"#{self}s"
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# This is simply a loader file.
|
|
2
|
-
require_relative "tui_engine/tui_engine"
|
|
2
|
+
require_relative "tui_engine/tui_engine"
|
data/lib/chef-licensing.rb
CHANGED
|
@@ -41,7 +41,7 @@ module ChefLicensing
|
|
|
41
41
|
unless ChefLicensing::Config.make_licensing_optional
|
|
42
42
|
if license_keys.empty?
|
|
43
43
|
raise ChefLicensing::LicenseKeyFetcher::LicenseKeyNotFetchedError,
|
|
44
|
-
|
|
44
|
+
"Unable to obtain a License Key."
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
client(license_keys: license_keys)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: chef-licensing
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Inspec Team
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2025-
|
|
11
|
+
date: 2025-11-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: chef-config
|
|
@@ -73,25 +73,19 @@ dependencies:
|
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
74
|
version: '0'
|
|
75
75
|
- !ruby/object:Gem::Dependency
|
|
76
|
-
name:
|
|
76
|
+
name: faraday_middleware
|
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
|
78
78
|
requirements:
|
|
79
79
|
- - "~>"
|
|
80
80
|
- !ruby/object:Gem::Version
|
|
81
|
-
version: '
|
|
82
|
-
- - ">="
|
|
83
|
-
- !ruby/object:Gem::Version
|
|
84
|
-
version: 7.2.2.1
|
|
81
|
+
version: '1.0'
|
|
85
82
|
type: :runtime
|
|
86
83
|
prerelease: false
|
|
87
84
|
version_requirements: !ruby/object:Gem::Requirement
|
|
88
85
|
requirements:
|
|
89
86
|
- - "~>"
|
|
90
87
|
- !ruby/object:Gem::Version
|
|
91
|
-
version: '
|
|
92
|
-
- - ">="
|
|
93
|
-
- !ruby/object:Gem::Version
|
|
94
|
-
version: 7.2.2.1
|
|
88
|
+
version: '1.0'
|
|
95
89
|
- !ruby/object:Gem::Dependency
|
|
96
90
|
name: tty-spinner
|
|
97
91
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -134,6 +128,20 @@ dependencies:
|
|
|
134
128
|
- - "~>"
|
|
135
129
|
- !ruby/object:Gem::Version
|
|
136
130
|
version: 0.1.0
|
|
131
|
+
- !ruby/object:Gem::Dependency
|
|
132
|
+
name: pstore
|
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
|
134
|
+
requirements:
|
|
135
|
+
- - "~>"
|
|
136
|
+
- !ruby/object:Gem::Version
|
|
137
|
+
version: 0.1.1
|
|
138
|
+
type: :runtime
|
|
139
|
+
prerelease: false
|
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
141
|
+
requirements:
|
|
142
|
+
- - "~>"
|
|
143
|
+
- !ruby/object:Gem::Version
|
|
144
|
+
version: 0.1.1
|
|
137
145
|
description: Ruby library to support CLI tools that use Progress Chef license storage,
|
|
138
146
|
generation, and entitlement.
|
|
139
147
|
email:
|
|
@@ -183,10 +191,12 @@ files:
|
|
|
183
191
|
- lib/chef-licensing/licensing_service/local.rb
|
|
184
192
|
- lib/chef-licensing/list_license_keys.rb
|
|
185
193
|
- lib/chef-licensing/log.rb
|
|
194
|
+
- lib/chef-licensing/pstore_adapter.rb
|
|
186
195
|
- lib/chef-licensing/restful_client/base.rb
|
|
187
196
|
- lib/chef-licensing/restful_client/middleware/content_type_validator.rb
|
|
188
197
|
- lib/chef-licensing/restful_client/middleware/exceptions_handler.rb
|
|
189
198
|
- lib/chef-licensing/restful_client/v1.rb
|
|
199
|
+
- lib/chef-licensing/string_refinements.rb
|
|
190
200
|
- lib/chef-licensing/tui_engine.rb
|
|
191
201
|
- lib/chef-licensing/tui_engine/tui_actions.rb
|
|
192
202
|
- lib/chef-licensing/tui_engine/tui_engine.rb
|