chef-provisioning 1.5.1 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +37 -3
- data/Gemfile +3 -0
- data/README.md +15 -1
- data/Rakefile +14 -1
- data/chef-provisioning.gemspec +2 -2
- data/lib/chef/provider/load_balancer.rb +0 -1
- data/lib/chef/provider/machine.rb +11 -5
- data/lib/chef/provider/machine_image.rb +0 -1
- data/lib/chef/provisioning/transport/ssh.rb +36 -6
- data/lib/chef/provisioning/version.rb +1 -1
- metadata +19 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b74d8382b16381913bc3607db51e0ec5c00db19a
|
4
|
+
data.tar.gz: 75b2979d44492c4f37925babe8ee872f1ef2f69d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf096a63be29a06fd54291bc3d75d9c7fff2bea359b8e4825a454aea075b008c3f0c1d24d01d8ba1de1e398c192de0df4e64a1ef0999867a19fcbc3c5b63052a
|
7
|
+
data.tar.gz: 2d0f1630b268b13c7547e991fc3cfdb66216e0f37ace235e2d05009c29aa21a8da3362ee4498e2c48e75bb0e211ef49228915ec5e41bdd8b68d31346b027be89
|
data/CHANGELOG.md
CHANGED
@@ -1,10 +1,35 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
-
## [
|
4
|
-
|
3
|
+
## [Unreleased](https://github.com/chef/chef-provisioning/tree/HEAD)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/chef/chef-provisioning/compare/v1.5.1...HEAD)
|
6
|
+
|
7
|
+
**Implemented enhancements:**
|
8
|
+
|
9
|
+
- Custom port forwards. [\#445](https://github.com/chef/chef-provisioning/pull/445) ([causton81](https://github.com/causton81))
|
10
|
+
|
11
|
+
**Closed issues:**
|
12
|
+
|
13
|
+
- Chef::Exceptions::ContentLengthMismatch Response body length XXXX does not match HTTP Content-Length header XXXX [\#446](https://github.com/chef/chef-provisioning/issues/446)
|
5
14
|
|
6
15
|
**Merged pull requests:**
|
7
16
|
|
17
|
+
- Fix Provisioning with Cheffish 1.x [\#496](https://github.com/chef/chef-provisioning/pull/496) ([jkeiser](https://github.com/jkeiser))
|
18
|
+
- Add "rake changelog" task [\#491](https://github.com/chef/chef-provisioning/pull/491) ([jkeiser](https://github.com/jkeiser))
|
19
|
+
- Stop using Chef::Provider::ChefNode directly \(cheffish 2.0 compat\) [\#490](https://github.com/chef/chef-provisioning/pull/490) ([jkeiser](https://github.com/jkeiser))
|
20
|
+
- Allow cheffish 2.0 as a dep [\#489](https://github.com/chef/chef-provisioning/pull/489) ([jkeiser](https://github.com/jkeiser))
|
21
|
+
- Updating to the latest release of net-ssh to consume net-ssh/net-ssh\#280 [\#485](https://github.com/chef/chef-provisioning/pull/485) ([tyler-ball](https://github.com/tyler-ball))
|
22
|
+
|
23
|
+
## [v1.5.1](https://github.com/chef/chef-provisioning/tree/v1.5.1) (2015-12-10)
|
24
|
+
[Full Changelog](https://github.com/chef/chef-provisioning/compare/v1.5.0...v1.5.1)
|
25
|
+
|
26
|
+
**Closed issues:**
|
27
|
+
|
28
|
+
- machine resource is broken with 'stock' windows AMI [\#470](https://github.com/chef/chef-provisioning/issues/470)
|
29
|
+
|
30
|
+
**Merged pull requests:**
|
31
|
+
|
32
|
+
- Release preperation for 1.5.1 [\#479](https://github.com/chef/chef-provisioning/pull/479) ([tyler-ball](https://github.com/tyler-ball))
|
8
33
|
- Require ResourceBuilder file before monkeypatching to ensure it is already defined [\#478](https://github.com/chef/chef-provisioning/pull/478) ([tyler-ball](https://github.com/tyler-ball))
|
9
34
|
- Ensure target directory exists when using write\_file with WinRM [\#471](https://github.com/chef/chef-provisioning/pull/471) ([xenolinguist](https://github.com/xenolinguist))
|
10
35
|
|
@@ -13,7 +38,9 @@
|
|
13
38
|
|
14
39
|
**Fixed bugs:**
|
15
40
|
|
41
|
+
- Method failed 'StartsWith' [\#460](https://github.com/chef/chef-provisioning/issues/460)
|
16
42
|
- :converge action should not re-install chef-client if the desired version is already installed [\#428](https://github.com/chef/chef-provisioning/issues/428)
|
43
|
+
- machine converge property - no longer used? [\#427](https://github.com/chef/chef-provisioning/issues/427)
|
17
44
|
- SSH available timeout needs to be configurable [\#362](https://github.com/chef/chef-provisioning/issues/362)
|
18
45
|
- Making available? timeout use provided ssh\_options, fixes \#362 [\#466](https://github.com/chef/chef-provisioning/pull/466) ([tyler-ball](https://github.com/tyler-ball))
|
19
46
|
- Pinning to mixlib-install 0.7.0 until 1.0 is out [\#464](https://github.com/chef/chef-provisioning/pull/464) ([tyler-ball](https://github.com/tyler-ball))
|
@@ -26,6 +53,7 @@
|
|
26
53
|
|
27
54
|
**Merged pull requests:**
|
28
55
|
|
56
|
+
- Preping 1.5.0 release [\#467](https://github.com/chef/chef-provisioning/pull/467) ([tyler-ball](https://github.com/tyler-ball))
|
29
57
|
- Add gemspec files to allow bundler to run from the gem [\#461](https://github.com/chef/chef-provisioning/pull/461) ([ksubrama](https://github.com/ksubrama))
|
30
58
|
- Pin mixlib-install more strictly. [\#459](https://github.com/chef/chef-provisioning/pull/459) ([sersut](https://github.com/sersut))
|
31
59
|
|
@@ -35,9 +63,14 @@
|
|
35
63
|
**Fixed bugs:**
|
36
64
|
|
37
65
|
- ohai\_hints should be be created at c:\chef\ohai\hints when provisioning windows nodes [\#433](https://github.com/chef/chef-provisioning/issues/433)
|
66
|
+
- throw exception if Chef::Provisioning::Transport.:WinRM\#execute command is over 3040 chars [\#432](https://github.com/chef/chef-provisioning/issues/432)
|
38
67
|
- Fix install\_sh\_arguments passing after the conversion to mixlib-install [\#452](https://github.com/chef/chef-provisioning/pull/452) ([irvingpop](https://github.com/irvingpop))
|
39
68
|
- Windows ohai hints, fixes \#433 [\#435](https://github.com/chef/chef-provisioning/pull/435) ([hh](https://github.com/hh))
|
40
69
|
|
70
|
+
**Merged pull requests:**
|
71
|
+
|
72
|
+
- Preparing to release 1.4.1 [\#456](https://github.com/chef/chef-provisioning/pull/456) ([tyler-ball](https://github.com/tyler-ball))
|
73
|
+
|
41
74
|
## [v1.4.0](https://github.com/chef/chef-provisioning/tree/v1.4.0) (2015-09-16)
|
42
75
|
[Full Changelog](https://github.com/chef/chef-provisioning/compare/v1.3.0...v1.4.0)
|
43
76
|
|
@@ -73,6 +106,7 @@
|
|
73
106
|
|
74
107
|
**Merged pull requests:**
|
75
108
|
|
109
|
+
- IN PROGRESS: 1.4.0 changelog [\#444](https://github.com/chef/chef-provisioning/pull/444) ([jkeiser](https://github.com/jkeiser))
|
76
110
|
- Remove dependency on chef gem [\#441](https://github.com/chef/chef-provisioning/pull/441) ([ksubrama](https://github.com/ksubrama))
|
77
111
|
- Adding a CONTRIBUTING document [\#437](https://github.com/chef/chef-provisioning/pull/437) ([tyler-ball](https://github.com/tyler-ball))
|
78
112
|
- Major generator/spec/Travis improvements [\#426](https://github.com/chef/chef-provisioning/pull/426) ([randomcamel](https://github.com/randomcamel))
|
@@ -806,4 +840,4 @@
|
|
806
840
|
## [v0.1](https://github.com/chef/chef-provisioning/tree/v0.1) (2013-12-21)
|
807
841
|
|
808
842
|
|
809
|
-
\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
|
843
|
+
\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
|
data/Gemfile
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
gemspec
|
3
3
|
|
4
|
+
gem 'github_changelog_generator'
|
4
5
|
#gem 'mixlib-install', path: '../mixlib-install'
|
5
6
|
#gem 'net-ssh', :path => '../net-ssh'
|
6
7
|
#gem 'chef', :path => '../chef'
|
@@ -12,4 +13,6 @@ gemspec
|
|
12
13
|
#gem 'chef-zero', :path => '../chef-zero'
|
13
14
|
group :development do
|
14
15
|
# gem "berkshelf", github: "berkshelf/berkshelf"
|
16
|
+
# TODO we depend on the master branch until chef/chef is released
|
17
|
+
gem "chef", github: "chef/chef", branch: "master"
|
15
18
|
end
|
data/README.md
CHANGED
@@ -199,7 +199,21 @@ with_machine_options({
|
|
199
199
|
ssh_options: { # a list of options to Net::SSH.start
|
200
200
|
:auth_methods => [ 'publickey' ], # DEFAULT
|
201
201
|
:keys_only => true, # DEFAULT
|
202
|
-
:host_key_alias => "#{instance.id}.AWS" # DEFAULT
|
202
|
+
:host_key_alias => "#{instance.id}.AWS", # DEFAULT
|
203
|
+
:key_data => nil, # use key from ssh-agent instead of a local file; remember to ssh-add your keys!
|
204
|
+
:forward_agent => true, # you may want your ssh-agent to be available on your provisioned machines
|
205
|
+
:remote_forwards => [
|
206
|
+
# Give remote host access to squid proxy on provisioning node
|
207
|
+
{:remote_port => 3128, :local_host => 'localhost', :local_port => 3128,},
|
208
|
+
# Give remote host access to private git server
|
209
|
+
{:remote_port => 2222, :local_host => 'git.example.com', :local_port => 22,},
|
210
|
+
],
|
211
|
+
# You can send net-ssh log info to the Chef::Log if you are having
|
212
|
+
# trouble with ssh.
|
213
|
+
:logger => Chef::Log,
|
214
|
+
# If you use :logger => Chef::Log and :verbose then your :verbose setting
|
215
|
+
# will override the global Chef::Config. Probably don't want to do this:
|
216
|
+
#:verbose => :warn,
|
203
217
|
}
|
204
218
|
})
|
205
219
|
```
|
data/Rakefile
CHANGED
@@ -37,4 +37,17 @@ namespace :driver do
|
|
37
37
|
Rake::Task['driver:verify'].invoke
|
38
38
|
Rake::Task['driver:clean'].invoke
|
39
39
|
end
|
40
|
-
end
|
40
|
+
end
|
41
|
+
|
42
|
+
begin
|
43
|
+
require 'github_changelog_generator/task'
|
44
|
+
|
45
|
+
GitHubChangelogGenerator::RakeTask.new :changelog do |config|
|
46
|
+
# config.future_release = ChefZero::VERSION
|
47
|
+
config.enhancement_labels = "enhancement,Enhancement,New Feature".split(',')
|
48
|
+
config.bug_labels = "bug,Bug,Improvement,Upstream Bug".split(',')
|
49
|
+
config.exclude_labels = "duplicate,question,invalid,wontfix,no_changelog".split(',')
|
50
|
+
end
|
51
|
+
rescue LoadError
|
52
|
+
# It's OK if the github_changelog_generator isn't there, that happens when we're testing older chef versions
|
53
|
+
end
|
data/chef-provisioning.gemspec
CHANGED
@@ -12,11 +12,11 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.email = 'jkeiser@chef.io'
|
13
13
|
s.homepage = 'http://github.com/chef/chef-provisioning/README.md'
|
14
14
|
|
15
|
-
s.add_dependency 'net-ssh', '
|
15
|
+
s.add_dependency 'net-ssh', '>= 2.9', '< 4.0'
|
16
16
|
s.add_dependency 'net-scp', '~> 1.0'
|
17
17
|
s.add_dependency 'net-ssh-gateway', '~> 1.2.0'
|
18
18
|
s.add_dependency 'inifile', '~> 2.0'
|
19
|
-
s.add_dependency 'cheffish', '
|
19
|
+
s.add_dependency 'cheffish', '>= 1.3.1', '< 3.0' # 1.3.1 allows 'let' vars in unquoted recipes.
|
20
20
|
s.add_dependency 'winrm', '~> 1.3'
|
21
21
|
s.add_dependency "mixlib-install", "~> 0.7.0"
|
22
22
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'chef/provider/lwrp_base'
|
2
|
-
require 'chef/
|
2
|
+
require 'chef/resource/chef_node'
|
3
3
|
require 'openssl'
|
4
4
|
require 'chef/provisioning/chef_provider_action_handler'
|
5
5
|
|
@@ -175,10 +175,16 @@ class Machine < Chef::Provider::LWRPBase
|
|
175
175
|
end
|
176
176
|
|
177
177
|
def load_current_resource
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
178
|
+
if defined?(Chef::Provider::ChefNode)
|
179
|
+
# Cheffish 1.x
|
180
|
+
node_provider = Chef::Provider::ChefNode.new(new_resource, run_context)
|
181
|
+
else
|
182
|
+
# Cheffish 2.x
|
183
|
+
node_provider = Chef::Resource::ChefNode.action_class.new(new_resource, run_context)
|
184
|
+
end
|
185
|
+
node_provider.load_current_resource
|
186
|
+
json = node_provider.new_json
|
187
|
+
json['normal']['chef_provisioning'] = node_provider.current_json['normal']['chef_provisioning']
|
182
188
|
@machine_spec = chef_managed_entry_store.new_entry(:machine, new_resource.name, json)
|
183
189
|
end
|
184
190
|
|
@@ -42,6 +42,7 @@ module Provisioning
|
|
42
42
|
@ssh_options = ssh_options
|
43
43
|
@options = options
|
44
44
|
@config = global_config
|
45
|
+
@remote_forwards = ssh_options.delete(:remote_forwards) { Array.new }
|
45
46
|
end
|
46
47
|
|
47
48
|
attr_reader :host
|
@@ -51,12 +52,25 @@ module Provisioning
|
|
51
52
|
attr_reader :config
|
52
53
|
|
53
54
|
def execute(command, execute_options = {})
|
54
|
-
Chef::Log.info("Executing #{options[:prefix]}#{command} on #{username}@#{host}")
|
55
|
+
Chef::Log.info("#{self.object_id} Executing #{options[:prefix]}#{command} on #{username}@#{host}")
|
55
56
|
stdout = ''
|
56
57
|
stderr = ''
|
57
58
|
exitstatus = nil
|
58
59
|
session # grab session outside timeout, it has its own timeout
|
60
|
+
|
59
61
|
with_execute_timeout(execute_options) do
|
62
|
+
@remote_forwards.each do |forward_info|
|
63
|
+
# -R flag to openssh client allows optional :remote_host and
|
64
|
+
# requires the other values so let's do that too.
|
65
|
+
remote_host = forward_info.fetch(:remote_host, 'localhost')
|
66
|
+
remote_port = forward_info.fetch(:remote_port)
|
67
|
+
local_host = forward_info.fetch(:local_host)
|
68
|
+
local_port = forward_info.fetch(:local_port)
|
69
|
+
|
70
|
+
actual_port, actual_host = forward_port(local_port, local_host, remote_port, remote_host)
|
71
|
+
Chef::Log.info("#{host} forwarded remote #{actual_host}:#{actual_port} to local #{local_host}:#{local_port}")
|
72
|
+
end
|
73
|
+
|
60
74
|
channel = session.open_channel do |channel|
|
61
75
|
# Enable PTY unless otherwise specified, some instances require this
|
62
76
|
unless options[:ssh_pty_enable] == false
|
@@ -85,6 +99,20 @@ module Provisioning
|
|
85
99
|
end
|
86
100
|
|
87
101
|
channel.wait
|
102
|
+
|
103
|
+
@remote_forwards.each do |forward_info|
|
104
|
+
# -R flag to openssh client allows optional :remote_host and
|
105
|
+
# requires the other values so let's do that too.
|
106
|
+
remote_host = forward_info.fetch(:remote_host, 'localhost')
|
107
|
+
remote_port = forward_info.fetch(:remote_port)
|
108
|
+
local_host = forward_info.fetch(:local_host)
|
109
|
+
local_port = forward_info.fetch(:local_port)
|
110
|
+
|
111
|
+
session.forward.cancel_remote(remote_port, remote_host)
|
112
|
+
session.loop { session.forward.active_remotes.include?([remote_port, remote_host]) }
|
113
|
+
|
114
|
+
Chef::Log.info("#{host} canceled remote forward #{remote_host}:#{remote_port}")
|
115
|
+
end
|
88
116
|
end
|
89
117
|
|
90
118
|
Chef::Log.info("Completed #{command} on #{username}@#{host}: exit status #{exitstatus}")
|
@@ -156,15 +184,17 @@ module Provisioning
|
|
156
184
|
end
|
157
185
|
uri.host = host
|
158
186
|
uri.port = port
|
187
|
+
Chef::Log.info("Port forwarded: local URL #{local_url} is available to #{self.host} as #{uri.to_s} for the duration of this SSH connection.")
|
188
|
+
else
|
189
|
+
Chef::Log.info("#{host} not forwarding non-local #{local_url}")
|
159
190
|
end
|
160
|
-
Chef::Log.info("Port forwarded: local URL #{local_url} is available to #{self.host} as #{uri.to_s} for the duration of this SSH connection.")
|
161
191
|
uri.to_s
|
162
192
|
end
|
163
193
|
|
164
194
|
def disconnect
|
165
195
|
if @session
|
166
196
|
begin
|
167
|
-
Chef::Log.
|
197
|
+
Chef::Log.info("Closing SSH session on #{username}@#{host}")
|
168
198
|
@session.close
|
169
199
|
rescue
|
170
200
|
ensure
|
@@ -177,7 +207,7 @@ module Provisioning
|
|
177
207
|
timeout = ssh_options[:timeout] || 10
|
178
208
|
execute('pwd', :timeout => timeout)
|
179
209
|
true
|
180
|
-
rescue Timeout::Error, Errno::EHOSTUNREACH, Errno::ENETUNREACH, Errno::EHOSTDOWN, Errno::ETIMEDOUT, Errno::ECONNREFUSED, Errno::ECONNRESET, Net::SSH::Disconnect
|
210
|
+
rescue Timeout::Error, Errno::EHOSTUNREACH, Errno::ENETUNREACH, Errno::EHOSTDOWN, Errno::ETIMEDOUT, Errno::ECONNREFUSED, Errno::ECONNRESET, Net::SSH::Disconnect, Net::SSH::ConnectionTimeout
|
181
211
|
Chef::Log.debug("#{username}@#{host} unavailable: network connection failed or broke: #{$!.inspect}")
|
182
212
|
disconnect
|
183
213
|
false
|
@@ -199,7 +229,7 @@ module Provisioning
|
|
199
229
|
if gateway? then gateway.ssh(host, username, ssh_start_opts)
|
200
230
|
else Net::SSH.start(host, username, ssh_start_opts)
|
201
231
|
end
|
202
|
-
rescue Timeout::Error
|
232
|
+
rescue Timeout::Error, Net::SSH::ConnectionTimeout
|
203
233
|
Chef::Log.debug("Timed out connecting to SSH: #{$!}")
|
204
234
|
raise InitialConnectTimeout.new($!)
|
205
235
|
end
|
@@ -333,7 +363,7 @@ module Provisioning
|
|
333
363
|
|
334
364
|
actual_remote_port, actual_remote_host = session.forward.active_remote_destinations[[local_port, local_host]]
|
335
365
|
if !actual_remote_port
|
336
|
-
Chef::Log.
|
366
|
+
Chef::Log.info("Forwarding local server #{local_host}:#{local_port} to #{username}@#{self.host}")
|
337
367
|
|
338
368
|
session.forward.remote(local_port, local_host, remote_port, remote_host) do |new_remote_port, new_remote_host|
|
339
369
|
actual_remote_host = new_remote_host
|
metadata
CHANGED
@@ -1,29 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-provisioning
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Keiser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: net-ssh
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '2.
|
19
|
+
version: '2.9'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '4.0'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: '2.
|
29
|
+
version: '2.9'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '4.0'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: net-scp
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,22 +76,22 @@ dependencies:
|
|
70
76
|
name: cheffish
|
71
77
|
requirement: !ruby/object:Gem::Requirement
|
72
78
|
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '1.3'
|
76
79
|
- - ">="
|
77
80
|
- !ruby/object:Gem::Version
|
78
81
|
version: 1.3.1
|
82
|
+
- - "<"
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '3.0'
|
79
85
|
type: :runtime
|
80
86
|
prerelease: false
|
81
87
|
version_requirements: !ruby/object:Gem::Requirement
|
82
88
|
requirements:
|
83
|
-
- - "~>"
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version: '1.3'
|
86
89
|
- - ">="
|
87
90
|
- !ruby/object:Gem::Version
|
88
91
|
version: 1.3.1
|
92
|
+
- - "<"
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '3.0'
|
89
95
|
- !ruby/object:Gem::Dependency
|
90
96
|
name: winrm
|
91
97
|
requirement: !ruby/object:Gem::Requirement
|
@@ -269,7 +275,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
269
275
|
version: '0'
|
270
276
|
requirements: []
|
271
277
|
rubyforge_project:
|
272
|
-
rubygems_version: 2.4.
|
278
|
+
rubygems_version: 2.4.5.1
|
273
279
|
signing_key:
|
274
280
|
specification_version: 4
|
275
281
|
summary: A library for creating machines and infrastructures idempotently in Chef.
|