chef-vault 4.1.5 → 4.1.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3dbf90bc269d6b9c3f76c53410d110c12f39fb82d7639c7f330fc44fe908b010
4
- data.tar.gz: 01bbe6b31cf4afd76eaaac84abe62ec19d09ce56f8f77e85085c2a8fee0a34da
3
+ metadata.gz: 44f75213a45df776972cad854aedf5abb94d7a54fde7a9986caed78930f8790e
4
+ data.tar.gz: aaa272cb7893c232b456ef5148bfc0ff91bc5b53a8ae4e9b573f68edaff78df8
5
5
  SHA512:
6
- metadata.gz: b10fd270fdbc62c7389eb81bc28426490df2ba0dee4cec0e40f6ff316e4a5368949dd315ccde9ed80b325f596f8eea59d7e8d506ee56fdf3c4a84b5e31ea1961
7
- data.tar.gz: '08aa808060b961b10594f92c48f3bdb7098fe3f9d2a9bc9fc1a35b1053aa4dd6b289c68d53a23eb874099203db873969497dda4c0678c42440261b6b1af57725'
6
+ metadata.gz: ad149c125f2aa41b9e3fd8d07281c65ecec8317bbc5a6daf2b7deb9e6def089820e57ee59ca68b53852f6fffe54cbf8d711e1c40b6ac04629597bc3ef07107c2
7
+ data.tar.gz: 8e0f928a9b4e8dfb6a2800d0d5c65af323cc2f4678b91b2a535b4c450cd71d96ea320b9861638329821ffe5041e025a81e1cf5dbb1cab5bc90bfcd703876afc1
data/Gemfile CHANGED
@@ -4,13 +4,22 @@ gemspec
4
4
 
5
5
  group :development do
6
6
  gem "chefstyle"
7
- gem "chef-zero"
8
7
  gem "rake"
9
- gem "rspec", "~> 3.4"
10
- gem "aruba", "~> 0.6"
11
- gem "chef", "~> 14.0" # avoids test failures on license acceptance
12
8
  gem "contracts", "~> 0.16.1" # pin until we drop ruby < 2.7
13
- gem "chef-utils", "= 16.6.14" # pin until we drop ruby 2.5
9
+ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("3.0.0")
10
+ gem "chef-zero"
11
+ gem "rspec", "~> 3.4"
12
+ gem "aruba", "~> 0.6"
13
+ gem "chef", "~> 14.0"
14
+ gem "chef-utils", "17.10.0" # pin until we drop ruby 2.5
15
+ else
16
+ gem "chef-zero", ">= 15.0.4"
17
+ gem "chef", "~> 17.0"
18
+ gem "rspec", "~> 3.10.0"
19
+ gem "aruba", "~> 1.1"
20
+ gem "knife", "~> 17.0"
21
+ gem "chef-utils", "17.10.0" # pin until we drop ruby >=3
22
+ end
14
23
  end
15
24
 
16
25
  group :docs do
@@ -22,6 +31,8 @@ end
22
31
  group :debug do
23
32
  gem "pry"
24
33
  gem "pry-byebug"
25
- gem "pry-stack_explorer", "~> 0.4.0" # pin until we drop ruby < 2.6
34
+ gem "pry-stack_explorer", "~> 0.6.1" # pin until we drop ruby < 2.6
26
35
  gem "rb-readline"
27
36
  end
37
+
38
+ gem "simplecov", require: false
data/chef-vault.gemspec CHANGED
@@ -31,5 +31,5 @@ Gem::Specification.new do |s|
31
31
  s.bindir = "bin"
32
32
  s.executables = %w{ chef-vault }
33
33
 
34
- s.required_ruby_version = ">= 2.4"
34
+ s.required_ruby_version = ">= 2.6"
35
35
  end
@@ -14,15 +14,11 @@
14
14
  # limitations under the License.
15
15
 
16
16
  require_relative "vault_base"
17
- require_relative "vault_admins"
18
- require_relative "vault_clients"
19
17
 
20
18
  class Chef
21
19
  class Knife
22
20
  class VaultCreate < Knife
23
21
  include Chef::Knife::VaultBase
24
- include Chef::Knife::VaultAdmins
25
- include Chef::Knife::VaultClients
26
22
 
27
23
  banner "knife vault create VAULT ITEM VALUES (options)"
28
24
 
@@ -55,6 +51,13 @@ class Chef
55
51
  long: "--file FILE",
56
52
  description: "File to be added to vault item as file-content"
57
53
 
54
+ deps do
55
+ require_relative "vault_admins"
56
+ require_relative "vault_clients"
57
+ include Chef::Knife::VaultAdmins
58
+ include Chef::Knife::VaultClients
59
+ end
60
+
58
61
  def run
59
62
  vault = @name_args[0]
60
63
  item = @name_args[1]
@@ -14,13 +14,11 @@
14
14
  # limitations under the License.
15
15
 
16
16
  require_relative "vault_base"
17
- require_relative "vault_clients"
18
17
 
19
18
  class Chef
20
19
  class Knife
21
20
  class VaultRemove < Knife
22
21
  include Chef::Knife::VaultBase
23
- include Chef::Knife::VaultClients
24
22
 
25
23
  banner "knife vault remove VAULT ITEM VALUES (options)"
26
24
 
@@ -43,6 +41,11 @@ class Chef
43
41
  long: "--clean-unknown-clients",
44
42
  description: "Remove unknown clients during key rotation"
45
43
 
44
+ deps do
45
+ require_relative "vault_clients"
46
+ include Chef::Knife::VaultClients
47
+ end
48
+
46
49
  def run
47
50
  vault = @name_args[0]
48
51
  item = @name_args[1]
@@ -14,15 +14,11 @@
14
14
  # limitations under the License.
15
15
 
16
16
  require_relative "vault_base"
17
- require_relative "vault_admins"
18
- require_relative "vault_clients"
19
17
 
20
18
  class Chef
21
19
  class Knife
22
20
  class VaultUpdate < Knife
23
21
  include Chef::Knife::VaultBase
24
- include Chef::Knife::VaultAdmins
25
- include Chef::Knife::VaultClients
26
22
 
27
23
  banner "knife vault update VAULT ITEM VALUES (options)"
28
24
 
@@ -59,6 +55,13 @@ class Chef
59
55
  long: "--keys-mode KEYS_MODE",
60
56
  description: "Mode in which to save vault keys"
61
57
 
58
+ deps do
59
+ require_relative "vault_admins"
60
+ require_relative "vault_clients"
61
+ include Chef::Knife::VaultAdmins
62
+ include Chef::Knife::VaultClients
63
+ end
64
+
62
65
  def run
63
66
  vault = @name_args[0]
64
67
  item = @name_args[1]
@@ -39,7 +39,7 @@ class ChefVault
39
39
  def get_admin_key
40
40
  # chef vault currently only supports using the default key
41
41
  get_key("users")
42
- rescue Net::HTTPServerException => http_error
42
+ rescue Net::HTTPClientException => http_error
43
43
  # if we failed to find an admin key, attempt to load a client key by the same name
44
44
  case http_error.response.code
45
45
  when "403"
@@ -49,7 +49,7 @@ class ChefVault
49
49
  begin
50
50
  ChefVault::Log.warn "The default key for #{name} not found in users, trying client keys."
51
51
  get_key("clients")
52
- rescue Net::HTTPServerException => http_error
52
+ rescue Net::HTTPClientException => http_error
53
53
  case http_error.response.code
54
54
  when "404"
55
55
  raise ChefVault::Exceptions::AdminNotFound,
@@ -68,7 +68,7 @@ class ChefVault
68
68
 
69
69
  def get_client_key
70
70
  get_key("clients")
71
- rescue Net::HTTPServerException => http_error
71
+ rescue Net::HTTPClientException => http_error
72
72
  if http_error.response.code.eql?("403")
73
73
  print_forbidden_error
74
74
  raise http_error
@@ -114,7 +114,7 @@ class ChefVault
114
114
  def get_key(request_actor_type)
115
115
  api.org_scoped_rest_v1.get("#{request_actor_type}/#{name}/keys/default").fetch("public_key")
116
116
  # If the keys endpoint doesn't exist, try getting it directly from the V0 chef object.
117
- rescue Net::HTTPServerException => http_error
117
+ rescue Net::HTTPClientException => http_error
118
118
  raise http_error unless http_error.response.code.eql?("404")
119
119
 
120
120
  if request_actor_type.eql?("clients")
@@ -40,6 +40,11 @@ class ChefVault
40
40
  # decrypt secrets. Defaults to the value of Chef::Config[:client_key]
41
41
  attr_accessor :client_key_path
42
42
 
43
+ # @!attribute [rw] client_key_contents
44
+ # @return [String] the contents of the private key that is used to
45
+ # decrypt secrets. Defaults to the value of Chef::Config[:client_key_contents]
46
+ attr_accessor :client_key_contents
47
+
43
48
  # returns the raw keys of the underlying Chef::DataBagItem. chef-vault v2
44
49
  # defined #keys as a public accessor that returns the ChefVault::ItemKeys
45
50
  # object for the vault. Ideally, #keys would provide Hash-like behaviour
@@ -58,6 +63,8 @@ class ChefVault
58
63
  # as. Defaults to the :node_name value of Chef::Config
59
64
  # @option opts [String] :client_key_path the name of the node to decrypt
60
65
  # secrets as. Defaults to the :client_key value of Chef::Config
66
+ # @option opts [String] :client_key_contents the private key to decrypt
67
+ # secrets as. Defaults to the :client_key_contents value of Chef::Config
61
68
  def initialize(vault, name, opts = {})
62
69
  super() # Don't pass parameters
63
70
  @data_bag = vault
@@ -68,9 +75,11 @@ class ChefVault
68
75
  opts = {
69
76
  node_name: Chef::Config[:node_name],
70
77
  client_key_path: Chef::Config[:client_key],
78
+ client_key_contents: Chef::Config[:client_key_contents],
71
79
  }.merge(opts)
72
80
  @node_name = opts[:node_name]
73
81
  @client_key_path = opts[:client_key_path]
82
+ @client_key_contents = opts[:client_key_contents]
74
83
  @current_query = search
75
84
  end
76
85
 
@@ -163,7 +172,11 @@ class ChefVault
163
172
 
164
173
  def secret
165
174
  if @keys.include?(@node_name) && !@keys[@node_name].nil?
166
- private_key = OpenSSL::PKey::RSA.new(File.open(@client_key_path).read)
175
+ unless @client_key_contents.nil?
176
+ private_key = OpenSSL::PKey::RSA.new(@client_key_contents)
177
+ else
178
+ private_key = OpenSSL::PKey::RSA.new(File.open(@client_key_path).read)
179
+ end
167
180
  begin
168
181
  private_key.private_decrypt(Base64.decode64(@keys[@node_name]))
169
182
  rescue OpenSSL::PKey::RSAError
@@ -231,7 +244,7 @@ class ChefVault
231
244
  else
232
245
  begin
233
246
  Chef::DataBag.load(data_bag)
234
- rescue Net::HTTPServerException => http_error
247
+ rescue Net::HTTPClientException => http_error
235
248
  if http_error.response.code == "404"
236
249
  chef_data_bag = Chef::DataBag.new
237
250
  chef_data_bag.name data_bag
@@ -295,7 +308,7 @@ class ChefVault
295
308
  begin
296
309
  item.raw_data =
297
310
  Chef::EncryptedDataBagItem.load(vault, name, item.secret).to_hash
298
- rescue Net::HTTPServerException => http_error
311
+ rescue Net::HTTPClientException => http_error
299
312
  if http_error.response.code == "404"
300
313
  raise ChefVault::Exceptions::ItemNotFound,
301
314
  "#{vault}/#{name} could not be found"
@@ -351,7 +364,7 @@ class ChefVault
351
364
  # and https://github.com/sensu/sensu-chef/blob/2.9.0/libraries/sensu_helpers.rb
352
365
  begin
353
366
  dbi = Chef::DataBagItem.load(vault, name)
354
- rescue Net::HTTPServerException => http_error
367
+ rescue Net::HTTPClientException => http_error
355
368
  if http_error.response.code == "404"
356
369
  raise ChefVault::Exceptions::ItemNotFound,
357
370
  "#{vault}/#{name} not found"
@@ -454,7 +467,7 @@ class ChefVault
454
467
  def client_exists?(clientname)
455
468
  Chef::ApiClient.load(clientname)
456
469
  true
457
- rescue Net::HTTPServerException => http_error
470
+ rescue Net::HTTPClientException => http_error
458
471
  return false if http_error.response.code == "404"
459
472
 
460
473
  raise http_error
@@ -122,7 +122,7 @@ class ChefVault
122
122
  unless Chef::Config[:solo_legacy_mode]
123
123
  begin
124
124
  Chef::DataBag.load(data_bag)
125
- rescue Net::HTTPServerException => http_error
125
+ rescue Net::HTTPClientException => http_error
126
126
  if http_error.response.code == "404"
127
127
  chef_data_bag = Chef::DataBag.new
128
128
  chef_data_bag.name data_bag
@@ -143,7 +143,7 @@ class ChefVault
143
143
  Chef::DataBagItem.from_hash("data_bag" => data_bag,
144
144
  "id" => sparse_id(key))
145
145
  .destroy(data_bag, sparse_id(key))
146
- rescue Net::HTTPServerException => http_error
146
+ rescue Net::HTTPClientException => http_error
147
147
  raise http_error unless http_error.response.code == "404"
148
148
  end
149
149
  end
@@ -234,7 +234,7 @@ class ChefVault
234
234
  def self.load(vault, name)
235
235
  begin
236
236
  data_bag_item = Chef::DataBagItem.load(vault, name)
237
- rescue Net::HTTPServerException => http_error
237
+ rescue Net::HTTPClientException => http_error
238
238
  if http_error.response.code == "404"
239
239
  raise ChefVault::Exceptions::KeysNotFound,
240
240
  "#{vault}/#{name} could not be found"
@@ -265,7 +265,7 @@ class ChefVault
265
265
  else
266
266
  begin
267
267
  Chef::DataBagItem.load(@data_bag, sid)
268
- rescue Net::HTTPServerException => http_error
268
+ rescue Net::HTTPClientException => http_error
269
269
  nil if http_error.response.code == "404"
270
270
  end
271
271
  end
@@ -15,6 +15,6 @@
15
15
  # limitations under the License.
16
16
 
17
17
  class ChefVault
18
- VERSION = "4.1.5"
18
+ VERSION = "4.1.11"
19
19
  MAJOR, MINOR, TINY = VERSION.split(".")
20
20
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-vault
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.5
4
+ version: 4.1.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thom May
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-26 00:00:00.000000000 Z
11
+ date: 2023-02-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Data encryption support for Chef Infra using data bags
14
14
  email:
@@ -61,7 +61,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
61
61
  requirements:
62
62
  - - ">="
63
63
  - !ruby/object:Gem::Version
64
- version: '2.4'
64
+ version: '2.6'
65
65
  required_rubygems_version: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - ">="