cheffish 16.0.6 → 17.0.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/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.
|