chef-licensing 1.2.0 → 1.3.1
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 -4
- 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 +2 -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 +18 -22
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 13e5f43edc6c30beb26a0e866d0bb2dfa03ec09ce3abe83b91dc2ed3da9fb98b
|
|
4
|
+
data.tar.gz: fd51667f12831899c41162905c706055fdd8d56afccd0d124da4db103203db5e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cb8cdeaf37e8100bee9c28ae8f5a454bdeaeda865c00875f552800fdeacc21949420d3b051068c1f43b0925d857fb310ff029161c840ee06150b761bc67e56a6
|
|
7
|
+
data.tar.gz: 0717c059d71531baeb045a2d0f32bc028f826873c5a8f2b535acf2837ae2e328355498a32a64d1e35eae88ba147f16cf8b07e85403dfec407cd74f93aed56da5
|
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) }
|
|
@@ -28,12 +28,12 @@ Gem::Specification.new do |spec|
|
|
|
28
28
|
|
|
29
29
|
spec.add_dependency "chef-config", ">= 15"
|
|
30
30
|
spec.add_dependency "tty-prompt", "~> 0.23"
|
|
31
|
-
spec.add_dependency "faraday", ">= 1", "<
|
|
31
|
+
spec.add_dependency "faraday", ">= 1", "< 3"
|
|
32
32
|
spec.add_dependency "faraday-http-cache"
|
|
33
|
-
spec.add_dependency "activesupport", "~> 7.2", ">= 7.2.2.1"
|
|
34
33
|
spec.add_dependency "tty-spinner", "~> 0.9.3"
|
|
35
34
|
spec.add_dependency "mixlib-log", "~> 3.0"
|
|
36
35
|
|
|
37
36
|
# Gem dependency needed with Ruby 3.4 upgrade
|
|
38
37
|
spec.add_dependency "ostruct", "~> 0.1.0"
|
|
38
|
+
spec.add_dependency "pstore", "~> 0.1.1"
|
|
39
39
|
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,11 @@
|
|
|
1
1
|
require "faraday" unless defined?(Faraday)
|
|
2
2
|
require "faraday/http_cache"
|
|
3
|
-
require "active_support"
|
|
4
3
|
require "tmpdir" unless defined?(Dir.mktmpdir)
|
|
5
4
|
require_relative "../exceptions/restful_client_error"
|
|
6
5
|
require_relative "../exceptions/restful_client_connection_error"
|
|
7
6
|
require_relative "../exceptions/missing_api_credentials_error"
|
|
8
7
|
require_relative "../config"
|
|
8
|
+
require_relative "../pstore_adapter"
|
|
9
9
|
require_relative "middleware/exceptions_handler"
|
|
10
10
|
require_relative "middleware/content_type_validator"
|
|
11
11
|
|
|
@@ -132,7 +132,7 @@ module ChefLicensing
|
|
|
132
132
|
end
|
|
133
133
|
|
|
134
134
|
def get_connection(url = nil)
|
|
135
|
-
store =
|
|
135
|
+
store = PStoreAdapter.new(Dir.tmpdir)
|
|
136
136
|
Faraday.new(url: url) do |config|
|
|
137
137
|
config.request :json
|
|
138
138
|
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.1
|
|
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-12-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: chef-config
|
|
@@ -47,7 +47,7 @@ dependencies:
|
|
|
47
47
|
version: '1'
|
|
48
48
|
- - "<"
|
|
49
49
|
- !ruby/object:Gem::Version
|
|
50
|
-
version: '
|
|
50
|
+
version: '3'
|
|
51
51
|
type: :runtime
|
|
52
52
|
prerelease: false
|
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -57,7 +57,7 @@ dependencies:
|
|
|
57
57
|
version: '1'
|
|
58
58
|
- - "<"
|
|
59
59
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: '
|
|
60
|
+
version: '3'
|
|
61
61
|
- !ruby/object:Gem::Dependency
|
|
62
62
|
name: faraday-http-cache
|
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -73,67 +73,61 @@ dependencies:
|
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
74
|
version: '0'
|
|
75
75
|
- !ruby/object:Gem::Dependency
|
|
76
|
-
name:
|
|
76
|
+
name: tty-spinner
|
|
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: 0.9.3
|
|
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: 0.9.3
|
|
95
89
|
- !ruby/object:Gem::Dependency
|
|
96
|
-
name:
|
|
90
|
+
name: mixlib-log
|
|
97
91
|
requirement: !ruby/object:Gem::Requirement
|
|
98
92
|
requirements:
|
|
99
93
|
- - "~>"
|
|
100
94
|
- !ruby/object:Gem::Version
|
|
101
|
-
version: 0
|
|
95
|
+
version: '3.0'
|
|
102
96
|
type: :runtime
|
|
103
97
|
prerelease: false
|
|
104
98
|
version_requirements: !ruby/object:Gem::Requirement
|
|
105
99
|
requirements:
|
|
106
100
|
- - "~>"
|
|
107
101
|
- !ruby/object:Gem::Version
|
|
108
|
-
version: 0
|
|
102
|
+
version: '3.0'
|
|
109
103
|
- !ruby/object:Gem::Dependency
|
|
110
|
-
name:
|
|
104
|
+
name: ostruct
|
|
111
105
|
requirement: !ruby/object:Gem::Requirement
|
|
112
106
|
requirements:
|
|
113
107
|
- - "~>"
|
|
114
108
|
- !ruby/object:Gem::Version
|
|
115
|
-
version:
|
|
109
|
+
version: 0.1.0
|
|
116
110
|
type: :runtime
|
|
117
111
|
prerelease: false
|
|
118
112
|
version_requirements: !ruby/object:Gem::Requirement
|
|
119
113
|
requirements:
|
|
120
114
|
- - "~>"
|
|
121
115
|
- !ruby/object:Gem::Version
|
|
122
|
-
version:
|
|
116
|
+
version: 0.1.0
|
|
123
117
|
- !ruby/object:Gem::Dependency
|
|
124
|
-
name:
|
|
118
|
+
name: pstore
|
|
125
119
|
requirement: !ruby/object:Gem::Requirement
|
|
126
120
|
requirements:
|
|
127
121
|
- - "~>"
|
|
128
122
|
- !ruby/object:Gem::Version
|
|
129
|
-
version: 0.1.
|
|
123
|
+
version: 0.1.1
|
|
130
124
|
type: :runtime
|
|
131
125
|
prerelease: false
|
|
132
126
|
version_requirements: !ruby/object:Gem::Requirement
|
|
133
127
|
requirements:
|
|
134
128
|
- - "~>"
|
|
135
129
|
- !ruby/object:Gem::Version
|
|
136
|
-
version: 0.1.
|
|
130
|
+
version: 0.1.1
|
|
137
131
|
description: Ruby library to support CLI tools that use Progress Chef license storage,
|
|
138
132
|
generation, and entitlement.
|
|
139
133
|
email:
|
|
@@ -183,10 +177,12 @@ files:
|
|
|
183
177
|
- lib/chef-licensing/licensing_service/local.rb
|
|
184
178
|
- lib/chef-licensing/list_license_keys.rb
|
|
185
179
|
- lib/chef-licensing/log.rb
|
|
180
|
+
- lib/chef-licensing/pstore_adapter.rb
|
|
186
181
|
- lib/chef-licensing/restful_client/base.rb
|
|
187
182
|
- lib/chef-licensing/restful_client/middleware/content_type_validator.rb
|
|
188
183
|
- lib/chef-licensing/restful_client/middleware/exceptions_handler.rb
|
|
189
184
|
- lib/chef-licensing/restful_client/v1.rb
|
|
185
|
+
- lib/chef-licensing/string_refinements.rb
|
|
190
186
|
- lib/chef-licensing/tui_engine.rb
|
|
191
187
|
- lib/chef-licensing/tui_engine/tui_actions.rb
|
|
192
188
|
- lib/chef-licensing/tui_engine/tui_engine.rb
|