cheffish 16.0.6 → 17.0.0

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: c9942d4df141be9174914e00fec17d021ed3531e7bca901a8dcdeb581326ee00
4
- data.tar.gz: 160fee2c6189559aff41eaa0ad32741996cba3ddd29cb69318da36627d00756a
3
+ metadata.gz: 6a022a0802ceebdb2656147e6ada5348b95a0d6df170317ce7407d049502c741
4
+ data.tar.gz: ea8e169d0521142100ab4224be43a870c375f3c32a25f509ff0de15b7343384c
5
5
  SHA512:
6
- metadata.gz: '08babeb42e2eea142a10a25b1ece32ebb9412de0d623ac5629d7b9173db99640c88a2b511c9ff30994d3784efb809c94b04ae954149332cd6c2c7798e7d44024'
7
- data.tar.gz: cd0400c6de976a6aaf9b64eea00d2f5114edd53c69474192b89e514e3c0bedb40b02a2bd8ba564ff3047da8002b20c3bc260ae6f115159b8b808dc5a1d2bcf92
6
+ metadata.gz: f2ade13896c429b961aa71d2ff1c721102e7d896d7ba7d157b13a312dc9c3268de544e4d2883cccd48f5d68e09c915ce34217eff02b9fde2be73fb2bc597aef2
7
+ data.tar.gz: b6b89cfdc3d836c83330619ec878e503de1226591779728229fbff51b6cff6bb9cd4624796eba695ff51e8e326e97c90ffc913e1b0d39ed7b01f16535ef5c217
data/Gemfile CHANGED
@@ -3,19 +3,23 @@ source "https://rubygems.org"
3
3
  gemspec
4
4
 
5
5
  group :development do
6
- gem "chefstyle", "1.2.0"
6
+ gem "chefstyle", "1.7.5"
7
7
  gem "rake"
8
8
  gem "rspec", "~> 3.0"
9
9
  end
10
10
 
11
+
11
12
  # Allow Travis to run tests with different dependency versions
12
13
  if ENV["GEMFILE_MOD"]
13
14
  puts ENV["GEMFILE_MOD"]
14
15
  instance_eval(ENV["GEMFILE_MOD"])
15
16
  else
16
17
  group :development do
17
- gem "chef", "~> 16"
18
- gem "ohai", "~> 16"
18
+ # temporarily we only support building against master
19
+ gem "chef", github: "chef/chef", branch: "master"
20
+ gem "ohai", github: "chef/ohai", branch: "master"
21
+ # gem "chef", "~> 16"
22
+ # gem "ohai", "~> 16"
19
23
  end
20
24
  end
21
25
 
data/Rakefile CHANGED
@@ -39,4 +39,4 @@ task :console do
39
39
  IRB.start
40
40
  end
41
41
 
42
- task default: %i{style spec}
42
+ task default: %i{spec style}
data/cheffish.gemspec CHANGED
@@ -12,9 +12,10 @@ Gem::Specification.new do |s|
12
12
  s.email = "oss@chef.io"
13
13
  s.homepage = "https://github.com/chef/cheffish"
14
14
 
15
- s.required_ruby_version = ">= 2.6.0"
15
+ s.required_ruby_version = ">= 2.7.0"
16
16
 
17
17
  s.add_dependency "chef-zero", ">= 14.0"
18
+ s.add_dependency "chef-utils", ">= 17.0"
18
19
  s.add_dependency "net-ssh"
19
20
 
20
21
  s.bindir = "bin"
@@ -1,8 +1,10 @@
1
1
  require_relative "../../cheffish"
2
2
  require_relative "../../cheffish/base_resource"
3
3
  require "chef/chef_fs/data_handler/acl_data_handler"
4
- require "chef/chef_fs/parallelizer"
5
- require "uri"
4
+ require "chef-utils/parallel_map" unless defined?(ChefUtils::ParallelMap)
5
+ require "uri" unless defined?(URI)
6
+
7
+ using ChefUtils::ParallelMap
6
8
 
7
9
  class Chef
8
10
  class Resource
@@ -126,13 +128,13 @@ class Chef
126
128
  # the ACL has changed.
127
129
  if new_resource.recursive == true || (new_resource.recursive == :on_change && (!acl || changed))
128
130
  children, _error = list(path, "*")
129
- Chef::ChefFS::Parallelizer.parallel_do(children) do |child|
131
+ children.parallel_each do |child|
130
132
  next if child.split("/")[-1] == "containers"
131
133
 
132
134
  create_acl(child)
133
135
  end
134
136
  # containers mess up our descent, so we do them last
135
- Chef::ChefFS::Parallelizer.parallel_do(children) do |child|
137
+ children.parallel_each do |child|
136
138
  next if child.split("/")[-1] != "containers"
137
139
 
138
140
  create_acl(child)
@@ -301,7 +303,7 @@ class Chef
301
303
  #
302
304
  # Result: /*/foo = [ '/organizations/foo', '/users/foo' ]
303
305
  #
304
- matches = Chef::ChefFS::Parallelizer.parallelize(matches) do |pth|
306
+ matches = matches.parallel_map do |pth|
305
307
  found, error = list(pth, part)
306
308
  if error
307
309
  if parts[0..index - 1].all? { |p| p != "*" }
@@ -312,7 +314,7 @@ class Chef
312
314
  else
313
315
  found
314
316
  end
315
- end.flatten(1).to_a
317
+ end.flatten.to_a
316
318
  end
317
319
 
318
320
  matches
@@ -196,17 +196,15 @@ class Chef
196
196
  end
197
197
 
198
198
  def new_secret
199
- @new_secret ||= begin
200
- if new_resource.secret
201
- new_resource.secret
202
- elsif new_resource.secret_path
203
- Chef::EncryptedDataBagItem.load_secret(new_resource.secret_path)
204
- elsif new_resource.encrypt.nil?
205
- current_resource.secret
206
- else
207
- raise "Data bag item #{new_resource.name} has encryption on but no secret or secret_path is specified"
208
- end
209
- end
199
+ @new_secret ||= if new_resource.secret
200
+ new_resource.secret
201
+ elsif new_resource.secret_path
202
+ Chef::EncryptedDataBagItem.load_secret(new_resource.secret_path)
203
+ elsif new_resource.encrypt.nil?
204
+ current_resource.secret
205
+ else
206
+ raise "Data bag item #{new_resource.name} has encryption on but no secret or secret_path is specified"
207
+ end
210
208
  end
211
209
 
212
210
  def decrypt(json, secret)
@@ -238,15 +236,13 @@ class Chef
238
236
 
239
237
  # Get the current json decrypted, for comparison purposes
240
238
  def current_decrypted
241
- @current_decrypted ||= begin
242
- if current_resource.secret
243
- decrypt(current_resource.raw_data || { "id" => new_resource.id }, current_resource.secret)
244
- elsif current_resource.encrypt
245
- raise "Could not decrypt current data bag item #{current_resource.name}"
246
- else
247
- current_resource.raw_data || { "id" => new_resource.id }
248
- end
249
- end
239
+ @current_decrypted ||= if current_resource.secret
240
+ decrypt(current_resource.raw_data || { "id" => new_resource.id }, current_resource.secret)
241
+ elsif current_resource.encrypt
242
+ raise "Could not decrypt current data bag item #{current_resource.name}"
243
+ else
244
+ current_resource.raw_data || { "id" => new_resource.id }
245
+ end
250
246
  end
251
247
 
252
248
  # Figure out the differences between new and current
@@ -2,9 +2,11 @@ require_relative "../../cheffish"
2
2
  require_relative "../../cheffish/base_resource"
3
3
  require "chef/chef_fs/file_pattern"
4
4
  require "chef/chef_fs/file_system"
5
- require "chef/chef_fs/parallelizer"
6
5
  require "chef/chef_fs/file_system/chef_server/chef_server_root_dir"
7
6
  require "chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir"
7
+ require "chef-utils/parallel_map" unless defined?(ChefUtils::ParallelMap)
8
+
9
+ using ChefUtils::ParallelMap
8
10
 
9
11
  class Chef
10
12
  class Resource
@@ -97,7 +99,7 @@ class Chef
97
99
  end
98
100
 
99
101
  # Honor concurrency
100
- Chef::ChefFS::Parallelizer.threads = new_resource.concurrency - 1
102
+ ChefUtils::DefaultThreadPool.instance.threads = new_resource.concurrency - 1
101
103
 
102
104
  # We don't let the user pass absolute paths; we want to reserve those for
103
105
  # multi-org support (/organizations/foo).
@@ -1,6 +1,6 @@
1
1
  require "openssl/cipher"
2
2
  require_relative "../../cheffish/base_resource"
3
- require "openssl"
3
+ require "openssl" unless defined?(OpenSSL)
4
4
  require_relative "../../cheffish/key_formatter"
5
5
 
6
6
  class Chef
@@ -78,7 +78,7 @@ class Chef
78
78
  desired_output = encode_private_key(new_source_key)
79
79
  if current_resource.path == :none || desired_output != IO.read(new_path)
80
80
  converge_by "reformat key at #{new_resource.source_key_path} to #{new_resource.format} private key #{new_path} (#{new_resource.pass_phrase ? ", #{new_resource.cipher} password" : ""})" do
81
- IO.write(new_path, desired_output)
81
+ IO.binwrite(new_path, desired_output)
82
82
  end
83
83
  end
84
84
 
@@ -137,7 +137,7 @@ class Chef
137
137
  converge_by "change format of #{new_resource.type} private key #{new_path} from #{current_resource.format} to #{new_resource.format}" do
138
138
  write_private_key(current_private_key)
139
139
  end
140
- elsif (@current_file_mode & 0077) != 0
140
+ elsif RUBY_PLATFORM !~ /mswin|mingw32|windows/ && (@current_file_mode & 0077) != 0
141
141
  new_mode = @current_file_mode & 07700
142
142
  converge_by "change mode of private key #{new_path} to #{new_mode.to_s(8)}" do
143
143
  ::File.chmod(new_mode, new_path)
@@ -171,25 +171,23 @@ class Chef
171
171
  end
172
172
 
173
173
  def write_private_key(key)
174
- ::File.open(new_path, "w") do |file|
174
+ ::File.open(new_path, "wb") do |file|
175
175
  file.chmod(0600)
176
176
  file.write(encode_private_key(key))
177
177
  end
178
178
  end
179
179
 
180
180
  def new_source_key
181
- @new_source_key ||= begin
182
- if new_resource.source_key.is_a?(String)
183
- source_key, _source_key_format = Cheffish::KeyFormatter.decode(new_resource.source_key, new_resource.source_key_pass_phrase)
184
- source_key
185
- elsif new_resource.source_key
186
- new_resource.source_key
187
- elsif new_resource.source_key_path
188
- source_key, _source_key_format = Cheffish::KeyFormatter.decode(IO.read(new_resource.source_key_path), new_resource.source_key_pass_phrase, new_resource.source_key_path)
189
- source_key
190
- else
191
- nil
192
- end
181
+ @new_source_key ||= if new_resource.source_key.is_a?(String)
182
+ source_key, _source_key_format = Cheffish::KeyFormatter.decode(new_resource.source_key, new_resource.source_key_pass_phrase)
183
+ source_key
184
+ elsif new_resource.source_key
185
+ new_resource.source_key
186
+ elsif new_resource.source_key_path
187
+ source_key, _source_key_format = Cheffish::KeyFormatter.decode(IO.read(new_resource.source_key_path), new_resource.source_key_pass_phrase, new_resource.source_key_path)
188
+ source_key
189
+ else
190
+ nil
193
191
  end
194
192
  end
195
193
 
@@ -1,6 +1,6 @@
1
1
  require "openssl/cipher"
2
2
  require_relative "../../cheffish/base_resource"
3
- require "openssl"
3
+ require "openssl" unless defined?(OpenSSL)
4
4
  require_relative "../../cheffish/key_formatter"
5
5
 
6
6
  class Chef
@@ -31,7 +31,7 @@ class Chef
31
31
  desired_output = encode_public_key(new_source_key)
32
32
  if Array(current_resource.action) == [ :delete ] || desired_output != IO.read(new_resource.path)
33
33
  converge_by "write #{new_resource.format} public key #{new_resource.path} from #{new_source_key_publicity} key #{new_resource.source_key_path}" do
34
- IO.write(new_resource.path, desired_output)
34
+ IO.binwrite(new_resource.path, desired_output)
35
35
  # TODO permissions on file?
36
36
  end
37
37
  end
@@ -62,7 +62,7 @@ class Chef
62
62
  elsif new_resource.source_key
63
63
  source_key = new_resource.source_key
64
64
  elsif new_resource.source_key_path
65
- source_key, _source_key_format = Cheffish::KeyFormatter.decode(IO.read(new_resource.source_key_path), new_resource.source_key_pass_phrase, new_resource.source_key_path)
65
+ source_key, _source_key_format = Cheffish::KeyFormatter.decode(IO.binread(new_resource.source_key_path), new_resource.source_key_pass_phrase, new_resource.source_key_path)
66
66
  else
67
67
  return nil
68
68
  end
data/lib/cheffish.rb CHANGED
@@ -32,11 +32,13 @@ module Cheffish
32
32
  end
33
33
 
34
34
  def self.load_chef_config(chef_config = Chef::Config)
35
- if ::Gem::Version.new(::Chef::VERSION) >= ::Gem::Version.new("12.0.0")
36
- chef_config.config_file = ::Chef::Knife.chef_config_dir
37
- else
38
- chef_config.config_file = ::Chef::Knife.locate_config_file
39
- end
35
+ chef_config.config_file = if ::Gem::Version.new(::Chef::VERSION) >= ::Gem::Version.new("12.0.0")
36
+ require "chef/workstation_config_loader"
37
+ Chef::WorkstationConfigLoader.new(nil, Chef::Log).chef_config_dir
38
+ else
39
+ require "chef/knife"
40
+ Chef::Knife.locate_config_file
41
+ end
40
42
  config_fetcher = Chef::ConfigFetcher.new(chef_config.config_file, chef_config.config_file_jail)
41
43
  if chef_config.config_file.nil?
42
44
  Chef::Log.warn("No config file found or specified on command line, using command line options.")
@@ -120,11 +122,17 @@ module Cheffish
120
122
  end
121
123
 
122
124
  # Include all recipe objects so require 'cheffish' brings in the whole recipe DSL
123
-
124
125
  require "chef/run_list/run_list_item"
125
126
  require_relative "cheffish/basic_chef_client"
126
127
  require_relative "cheffish/server_api"
127
- require "chef/knife"
128
+
129
+ # Starting with the version below, knife is no longer in the chef gem and is
130
+ # not available during a chef-client run. We'll keep it here for older versions
131
+ # to retain backward-compatibility.
132
+ if ::Gem::Version.new(::Chef::VERSION) < ::Gem::Version.new("17.0.178")
133
+ require "chef/knife"
134
+ end
135
+
128
136
  require "chef/config_fetcher"
129
137
  require "chef/log"
130
138
  require "chef/application"
@@ -5,7 +5,7 @@ require "chef/event_dispatch/dispatcher"
5
5
  require "chef/node"
6
6
  require "chef/run_context"
7
7
  require "chef/runner"
8
- require "forwardable"
8
+ require "forwardable" unless defined?(Forwardable)
9
9
  require "chef/providers"
10
10
  require "chef/resources"
11
11
 
@@ -74,38 +74,36 @@ module Cheffish
74
74
  end
75
75
 
76
76
  def new_public_key
77
- @new_public_key ||= begin
78
- if new_resource.source_key
79
- if new_resource.source_key.is_a?(String)
80
- key, _key_format = Cheffish::KeyFormatter.decode(new_resource.source_key)
77
+ @new_public_key ||= if new_resource.source_key
78
+ if new_resource.source_key.is_a?(String)
79
+ key, _key_format = Cheffish::KeyFormatter.decode(new_resource.source_key)
81
80
 
82
- if key.private?
83
- key.public_key
84
- else
85
- key
86
- end
87
- elsif new_resource.source_key.private?
88
- new_resource.source_key.public_key
89
- else
90
- new_resource.source_key
91
- end
92
- elsif new_resource.source_key_path
93
- source_key_path = new_resource.source_key_path
94
- if Pathname.new(source_key_path).relative?
95
- source_key_str, source_key_path = Cheffish.get_private_key_with_path(source_key_path, run_context.config)
96
- else
97
- source_key_str = IO.read(source_key_path)
98
- end
99
- source_key, _source_key_format = Cheffish::KeyFormatter.decode(source_key_str, new_resource.source_key_pass_phrase, source_key_path)
100
- if source_key.private?
101
- source_key.public_key
102
- else
103
- source_key
104
- end
105
- else
106
- nil
107
- end
108
- end
81
+ if key.private?
82
+ key.public_key
83
+ else
84
+ key
85
+ end
86
+ elsif new_resource.source_key.private?
87
+ new_resource.source_key.public_key
88
+ else
89
+ new_resource.source_key
90
+ end
91
+ elsif new_resource.source_key_path
92
+ source_key_path = new_resource.source_key_path
93
+ if Pathname.new(source_key_path).relative?
94
+ source_key_str, source_key_path = Cheffish.get_private_key_with_path(source_key_path, run_context.config)
95
+ else
96
+ source_key_str = IO.read(source_key_path)
97
+ end
98
+ source_key, _source_key_format = Cheffish::KeyFormatter.decode(source_key_str, new_resource.source_key_pass_phrase, source_key_path)
99
+ if source_key.private?
100
+ source_key.public_key
101
+ else
102
+ source_key
103
+ end
104
+ else
105
+ nil
106
+ end
109
107
  end
110
108
 
111
109
  def augment_new_json(json)
@@ -41,7 +41,7 @@ module Cheffish
41
41
  chef_config[:log_location] = StringIOTee.new(chef_config[:log_location])
42
42
  @client = ::Cheffish::BasicChefClient.new(nil,
43
43
  [ event_sink, Chef::Formatters.new(:doc, chef_config[:stdout], chef_config[:stderr]) ],
44
- chef_config)
44
+ **chef_config)
45
45
  end
46
46
  end
47
47
 
@@ -1,9 +1,9 @@
1
- require "openssl"
2
- require "net/ssh"
3
- require "etc"
4
- require "socket"
5
- require "digest/md5"
6
- require "base64"
1
+ require "openssl" unless defined?(OpenSSL)
2
+ require "net/ssh" unless defined?(Net::SSH)
3
+ require "etc" unless defined?(Etc)
4
+ require "socket" unless defined?(Socket)
5
+ require "digest/md5" unless defined?(Digest::MD5)
6
+ require "base64" unless defined?(Base64)
7
7
 
8
8
  module Cheffish
9
9
  class KeyFormatter
@@ -62,13 +62,11 @@ class Chef
62
62
  string_key = "#{type}_path"
63
63
  symbol_key = "#{type}_path".to_sym
64
64
 
65
- options[symbol_key] ||= begin
66
- if options[:chef_repo_path].is_a?(String)
67
- Chef::Util::PathHelper.join(options[:chef_repo_path], "#{type}s")
68
- else
69
- options[:chef_repo_path].map { |path| Chef::Util::PathHelper.join(path, "#{type}s") }
70
- end
71
- end
65
+ options[symbol_key] ||= if options[:chef_repo_path].is_a?(String)
66
+ Chef::Util::PathHelper.join(options[:chef_repo_path], "#{type}s")
67
+ else
68
+ options[:chef_repo_path].map { |path| Chef::Util::PathHelper.join(path, "#{type}s") }
69
+ end
72
70
 
73
71
  # Copy over to string keys for things that use string keys (ChefFS)...
74
72
  # TODO: Fix ChefFS to take symbols or use something that is insensitive to the difference
@@ -1,7 +1,7 @@
1
1
  require "chef_zero/rspec"
2
2
  require "chef/server_api"
3
3
  require_relative "repository_support"
4
- require "uri"
4
+ require "uri" unless defined?(URI)
5
5
  require_relative "../chef_run"
6
6
  require_relative "recipe_run_wrapper"
7
7
  require_relative "matchers"
@@ -1,5 +1,5 @@
1
1
  require_relative "../chef_run"
2
- require "forwardable"
2
+ require "forwardable" unless defined?(Forwardable)
3
3
 
4
4
  module Cheffish
5
5
  module RSpec
@@ -1,3 +1,3 @@
1
1
  module Cheffish
2
- VERSION = "16.0.6".freeze
2
+ VERSION = "17.0.0".freeze
3
3
  end
@@ -224,7 +224,7 @@ describe Chef::Resource::PrivateKey do
224
224
  end
225
225
  end.to have_updated "private_key[#{repo_path}/blah]", :create
226
226
  expect(IO.read("#{repo_path}/blah")).not_to start_with("-----BEGIN")
227
- expect(OpenSSL::PKey.read(IO.read("#{repo_path}/blah"))).to be_kind_of(OpenSSL::PKey::RSA)
227
+ expect(OpenSSL::PKey.read(IO.binread("#{repo_path}/blah"))).to be_kind_of(OpenSSL::PKey::RSA)
228
228
  end
229
229
  end
230
230
 
@@ -4,7 +4,11 @@ require "cheffish/rspec/chef_run_support"
4
4
  describe "Cheffish::RSpec::ChefRunSupport" do
5
5
  extend Cheffish::RSpec::ChefRunSupport
6
6
 
7
- let(:temp_file) { Tempfile.new("test") }
7
+ let(:temp_file) do
8
+ f = Tempfile.new("test")
9
+ f.close
10
+ f
11
+ end
8
12
 
9
13
  context "#recipe" do
10
14
  it "recipe { file ... } updates the file" do
@@ -1,10 +1,10 @@
1
1
  RSpec::Matchers.define :be_public_key_for do |private_key, pass_phrase|
2
2
  match do |public_key|
3
3
  if public_key.is_a?(String)
4
- public_key, _public_key_format = Cheffish::KeyFormatter.decode(IO.read(File.expand_path(public_key)), pass_phrase, public_key)
4
+ public_key, _public_key_format = Cheffish::KeyFormatter.decode(IO.binread(File.expand_path(public_key)), pass_phrase, public_key)
5
5
  end
6
6
  if private_key.is_a?(String)
7
- private_key, _private_key_format = Cheffish::KeyFormatter.decode(IO.read(File.expand_path(private_key)), pass_phrase, private_key)
7
+ private_key, _private_key_format = Cheffish::KeyFormatter.decode(IO.binread(File.expand_path(private_key)), pass_phrase, private_key)
8
8
  end
9
9
 
10
10
  encrypted = public_key.public_encrypt("hi there")
@@ -15,10 +15,10 @@ end
15
15
  RSpec::Matchers.define :match_private_key do |expected, pass_phrase|
16
16
  match do |actual|
17
17
  if expected.is_a?(String)
18
- expected, _format = Cheffish::KeyFormatter.decode(IO.read(File.expand_path(expected)), pass_phrase, expected)
18
+ expected, _format = Cheffish::KeyFormatter.decode(IO.binread(File.expand_path(expected)), pass_phrase, expected)
19
19
  end
20
20
  if actual.is_a?(String)
21
- actual, _format = Cheffish::KeyFormatter.decode(IO.read(File.expand_path(actual)), pass_phrase, actual)
21
+ actual, _format = Cheffish::KeyFormatter.decode(IO.binread(File.expand_path(actual)), pass_phrase, actual)
22
22
  end
23
23
 
24
24
  encrypted = actual.public_encrypt("hi there")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cheffish
3
3
  version: !ruby/object:Gem::Version
4
- version: 16.0.6
4
+ version: 17.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chef Software Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-06 00:00:00.000000000 Z
11
+ date: 2021-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef-zero
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '14.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: chef-utils
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '17.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '17.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: net-ssh
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -120,14 +134,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
120
134
  requirements:
121
135
  - - ">="
122
136
  - !ruby/object:Gem::Version
123
- version: 2.6.0
137
+ version: 2.7.0
124
138
  required_rubygems_version: !ruby/object:Gem::Requirement
125
139
  requirements:
126
140
  - - ">="
127
141
  - !ruby/object:Gem::Version
128
142
  version: '0'
129
143
  requirements: []
130
- rubygems_version: 3.0.3
144
+ rubygems_version: 3.1.4
131
145
  signing_key:
132
146
  specification_version: 4
133
147
  summary: A set of Chef resources for configuring Chef Infra.