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 +4 -4
- data/Gemfile +7 -3
- data/Rakefile +1 -1
- data/cheffish.gemspec +2 -1
- data/lib/chef/resource/chef_acl.rb +8 -6
- data/lib/chef/resource/chef_data_bag_item.rb +16 -20
- data/lib/chef/resource/chef_mirror.rb +4 -2
- data/lib/chef/resource/private_key.rb +14 -16
- data/lib/chef/resource/public_key.rb +3 -3
- data/lib/cheffish.rb +15 -7
- data/lib/cheffish/basic_chef_client.rb +1 -1
- data/lib/cheffish/chef_actor_base.rb +29 -31
- data/lib/cheffish/chef_run.rb +1 -1
- data/lib/cheffish/key_formatter.rb +6 -6
- data/lib/cheffish/recipe_dsl.rb +5 -7
- data/lib/cheffish/rspec/chef_run_support.rb +1 -1
- data/lib/cheffish/rspec/recipe_run_wrapper.rb +1 -1
- data/lib/cheffish/version.rb +1 -1
- data/spec/integration/private_key_spec.rb +1 -1
- data/spec/integration/rspec/converge_spec.rb +5 -1
- data/spec/support/key_support.rb +4 -4
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a022a0802ceebdb2656147e6ada5348b95a0d6df170317ce7407d049502c741
|
4
|
+
data.tar.gz: ea8e169d0521142100ab4224be43a870c375f3c32a25f509ff0de15b7343384c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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
|
-
|
18
|
-
gem "
|
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
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.
|
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/
|
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
|
-
|
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
|
-
|
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 =
|
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
|
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 ||=
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
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 ||=
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
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
|
-
|
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.
|
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, "
|
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 ||=
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
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.
|
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.
|
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
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
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
|
-
|
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"
|
@@ -74,38 +74,36 @@ module Cheffish
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def new_public_key
|
77
|
-
@new_public_key ||=
|
78
|
-
|
79
|
-
|
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
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
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)
|
data/lib/cheffish/chef_run.rb
CHANGED
@@ -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
|
data/lib/cheffish/recipe_dsl.rb
CHANGED
@@ -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] ||=
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
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
|
data/lib/cheffish/version.rb
CHANGED
@@ -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.
|
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)
|
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
|
data/spec/support/key_support.rb
CHANGED
@@ -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.
|
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.
|
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.
|
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.
|
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:
|
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:
|
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.
|
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.
|
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.
|