chef-metal 0.11.beta.2 → 0.11.beta.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 856d6cabfcf4414a418cc036d3b9214126a91162
4
- data.tar.gz: c31563bac13782c4445ae2d69a7e69ee2ff9c4f3
3
+ metadata.gz: 1ddce3b9695b8227fa35fc0eef02506df0c8107d
4
+ data.tar.gz: 3d1fd09662aa1d39d4badd40d00e28792b6a2263
5
5
  SHA512:
6
- metadata.gz: 1a689a1bb4f4cf63da67d784d2dfe818fd8c28c516de6aec74896f96dbe6bf7f7b01c3db25e9079493d3ba144ef31c12f975900dba8e6e5c38bfb52d55f9b7d4
7
- data.tar.gz: cb9456dc0eea0944fadbdcd553571ccff00ccf6df8fb75198ff3da34c5c953fc5a526948f4200423d9f79c591b39ef43077782e2b68f9ed4fdd2e6ca5307318f
6
+ metadata.gz: e518ac22332cabb69df9bb5a77beedfbdbc4ac37e5a8a50d3f06272bf346b9b1b343891c5f593e8f61447ce1ea8569a039438c940696935e3dfcb569fb783de9
7
+ data.tar.gz: d4b8d64ef682e3bab426f273030ee01e2f8a176b5079263a51733180d10a5168979c57b0805491f281d27bc0c9deff691d1953c5b9d0ae2aa0d5151fa110719b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Chef Metal Changelog
2
2
 
3
+ ## 0.11.beta.2 (5/27/2014)
4
+
5
+ - Bring in cheffish-0.5.beta.2
6
+
3
7
  ## 0.11.beta (5/23/2014)
4
8
 
5
9
  - New Driver interface (see docs/ and blogs/ directories for documentation)
data/bin/metal CHANGED
@@ -10,6 +10,7 @@ require 'chef/run_context'
10
10
  require 'chef/server_api'
11
11
  require 'chef_metal/action_handler'
12
12
  require 'chef_metal/version'
13
+ require 'chef_metal/chef_machine_spec'
13
14
 
14
15
  class ChefMetal::Application < Chef::Application
15
16
 
@@ -92,20 +93,6 @@ class ChefMetal::Application < Chef::Application
92
93
  Chef::Config.chef_repo_path = Chef::Config.find_chef_repo_path(Dir.pwd)
93
94
  end
94
95
  Chef::Config.chef_zero.port = config[:chef_zero_port] if config[:chef_zero_port]
95
-
96
- if Chef::Config[:daemonize]
97
- Chef::Config[:interval] ||= 1800
98
- end
99
-
100
- if Chef::Config[:once]
101
- Chef::Config[:interval] = nil
102
- Chef::Config[:splay] = nil
103
- end
104
-
105
- if Chef::Config[:json_attribs]
106
- config_fetcher = Chef::ConfigFetcher.new(Chef::Config[:json_attribs])
107
- @chef_client_json = config_fetcher.fetch_json
108
- end
109
96
  end
110
97
 
111
98
  def setup_application
@@ -120,89 +107,107 @@ class ChefMetal::Application < Chef::Application
120
107
  end
121
108
 
122
109
  def run_application
123
- Chef::Application.setup_server_connectivity
124
-
125
- command = cli_arguments.shift
126
110
  exit_code = 0
127
- case command
128
- when 'execute'
129
- each_machine(cli_arguments.shift) do |machine, provisioner|
130
- result = machine.execute(action_handler, cli_arguments.join(' '), :read_only => config[:read_only], :stream => config[:stream], :timeout => config[:timeout].to_f)
131
- puts result.stdout if result.stdout != '' && !config[:stream] && Chef::Config.log_level != :debug
132
- STDERR.puts result.stderr if result.stderr != '' && !config[:stream] && Chef::Config.log_level != :debug
133
- exit_code = result.exitstatus if result.exitstatus != 0
134
- end
135
- when 'converge'
136
- each_machine(cli_arguments.shift) do |machine, provisioner|
137
- machine.converge(action_handler)
138
- end
139
- when 'delete'
140
- each_machine(cli_arguments.shift) do |machine, provisioner|
141
- provisioner.delete_machine(action_handler, machine.machine_spec)
142
- end
143
- when 'update'
144
- each_machine(cli_arguments.shift) do |machine, provisioner|
145
- machine = provisioner.acquire_machine(action_handler, machine.machine_spec)
146
- # TODO find out what files were uploaded so we can do it again
147
- machine.setup_convergence(action_handler)
148
- machine.converge(action_handler)
149
- end
150
- when 'stop'
151
- each_machine(cli_arguments.shift) do |machine, provisioner|
152
- provisioner.stop_machine(action_handler, machine.machine_spec)
153
- end
154
- when 'cat'
155
- each_machine(cli_arguments.shift) do |machine, provisioner|
156
- cli_arguments.each do |remote_path|
157
- puts machine.read_file(remote_path)
158
- end
159
- end
160
- when 'cp'
161
- machines = {}
162
- to = cli_arguments.pop
163
- if to =~ /^([^\/:]+):(.+)$/
164
- to_server = $1
165
- machines[to_server] ||= ChefMetal.connect_to_machine(to_server)
166
- to_path = $2
167
- to_is_directory = machines[to_server].is_directory?(to_path)
168
- else
169
- to_server = nil
170
- to_path = File.absolute_path(to)
171
- end
172
111
 
173
- cli_arguments.each do |from|
174
- if from =~ /^([^\/:]+):(.+)$/
175
- from_server = $1
176
- from_path = $2
177
- if to_server
178
- raise "Cannot copy from one server to another, or intraserver (from=#{from}, to=#{to})"
112
+ Cheffish.honor_local_mode do
113
+ command = cli_arguments.shift
114
+ case command
115
+ when 'execute'
116
+ connect_to_machines(cli_arguments.shift) do |machine|
117
+ machine.execute(action_handler, cli_arguments.join(' '), :read_only => config[:read_only], :stream => config[:stream], :timeout => config[:timeout].to_f)
118
+ puts result.stdout if result.stdout != '' && !config[:stream] && Chef::Config.log_level != :debug
119
+ STDERR.puts result.stderr if result.stderr != '' && !config[:stream] && Chef::Config.log_level != :debug
120
+ exit_code = result.exitstatus if result.exitstatus != 0
121
+ end
122
+ when 'destroy'
123
+ each_current_machine(cli_arguments.shift) do |driver, specs_and_options|
124
+ driver.destroy_machines(action_handler, specs_and_options, parallelizer)
125
+ end
126
+ when 'allocate'
127
+ each_new_machine(cli_arguments.shift) do |driver, specs_and_options|
128
+ driver.allocate_machines(action_handler, specs_and_options, parallelizer)
129
+ end
130
+ when 'ready'
131
+ each_new_machine(cli_arguments.shift) do |driver, specs_and_options|
132
+ driver.allocate_machines(action_handler, specs_and_options, parallelizer)
133
+ driver.ready_machines(action_handler, specs_and_options, parallelizer)
134
+ end
135
+ when 'setup'
136
+ each_new_machine(cli_arguments.shift) do |driver, specs_and_options|
137
+ driver.allocate_machines(action_handler, specs_and_options, parallelizer)
138
+ driver.ready_machines(action_handler, specs_and_options, parallelizer) do |machine|
139
+ machine.setup_convergence(action_handler)
179
140
  end
180
-
181
- machines[from_server] ||= ChefMetal.connect_to_machine(from_server)
182
- if File.directory?(to_path)
183
- machines[from_server].download_file(action_handler, from_path, "#{to_path}/#{File.basename(from_path)}")
184
- else
185
- machines[from_server].download_file(action_handler, from_path, to_path)
141
+ end
142
+ when 'converge'
143
+ each_new_machine(cli_arguments.shift) do |driver, specs_and_options|
144
+ driver.allocate_machines(action_handler, specs_and_options, parallelizer)
145
+ driver.ready_machines(action_handler, specs_and_options, parallelizer) do |machine|
146
+ # TODO upload files? Maybe they should be in machine_options?
147
+ machine.setup_convergence(action_handler)
148
+ machine.converge(action_handler)
186
149
  end
187
- else
188
- from_server = nil
189
- from_path = File.absolute_path(from)
190
- if !to_server
191
- raise "Cannot copy two local files. One of the arguments must be MACHINE:PATH. (from=#{from}, to=#{to})"
150
+ end
151
+ when 'reconverge'
152
+ connect_to_machines(cli_arguments.shift) do |machine|
153
+ machine.converge(action_handler)
154
+ end
155
+ when 'stop'
156
+ each_current_machine(cli_arguments.shift) do |driver, specs_and_options|
157
+ driver.stop_machines(action_handler, specs_and_options, parallelizer)
158
+ end
159
+ when 'cat'
160
+ connect_to_machines(cli_arguments.shift) do |machine|
161
+ cli_arguments.each do |remote_path|
162
+ puts machine.read_file(remote_path)
192
163
  end
164
+ end
165
+ when 'cp'
166
+ machines = {}
167
+ to = cli_arguments.pop
168
+ if to =~ /^([^\/:]+):(.+)$/
169
+ to_server = $1
170
+ machines[to_server] ||= ChefMetal.connect_to_machine(to_server)
171
+ to_path = $2
172
+ to_is_directory = machines[to_server].is_directory?(to_path)
173
+ else
174
+ to_server = nil
175
+ to_path = File.absolute_path(to)
176
+ end
193
177
 
194
- if to_is_directory
195
- machines[to_server].upload_file(action_handler, from_path, "#{to_path}/#{File.basename(from_path)}")
178
+ cli_arguments.each do |from|
179
+ if from =~ /^([^\/:]+):(.+)$/
180
+ from_server = $1
181
+ from_path = $2
182
+ if to_server
183
+ raise "Cannot copy from one server to another, or intraserver (from=#{from}, to=#{to})"
184
+ end
185
+
186
+ machines[from_server] ||= connect_to_machine(from_server)
187
+ if File.directory?(to_path)
188
+ machines[from_server].download_file(action_handler, from_path, "#{to_path}/#{File.basename(from_path)}")
189
+ else
190
+ machines[from_server].download_file(action_handler, from_path, to_path)
191
+ end
196
192
  else
197
- machines[to_server].upload_file(action_handler, from_path, to_path)
193
+ from_server = nil
194
+ from_path = File.absolute_path(from)
195
+ if !to_server
196
+ raise "Cannot copy two local files. One of the arguments must be MACHINE:PATH. (from=#{from}, to=#{to})"
197
+ end
198
+
199
+ if to_is_directory
200
+ machines[to_server].upload_file(action_handler, from_path, "#{to_path}/#{File.basename(from_path)}")
201
+ else
202
+ machines[to_server].upload_file(action_handler, from_path, to_path)
203
+ end
198
204
  end
199
205
  end
206
+ else
207
+ Chef::Log.error("Command '#{command}' unrecognized")
200
208
  end
201
- else
202
- Chef::Log.error("Command '#{command}' unrecognized")
203
209
  end
204
210
 
205
- Chef::Application.destroy_server_connectivity
206
211
  exit(exit_code) if exit_code != 0
207
212
  end
208
213
 
@@ -212,24 +217,47 @@ class ChefMetal::Application < Chef::Application
212
217
  @rest ||= Chef::ServerAPI.new()
213
218
  end
214
219
 
215
- def each_machine(spec)
216
- spec.split(',').each do |name|
217
- yield ChefMetal.connect_to_machine(name)
220
+ def machine_specs(*specs)
221
+ names = specs.collect_concat { |spec| spec.split(',') }.uniq
222
+ parallelizer.parallelize(names) { |name| ChefMetal::ChefMachineSpec.get(name) }.to_a
223
+ end
224
+
225
+ def each_new_machine(spec)
226
+ driver = ChefMetal.default_driver
227
+ specs_and_options = {}
228
+ machine_specs(spec).each do |machine_spec|
229
+ specs_and_options[machine_spec] = driver.config[:machine_options]
218
230
  end
231
+ [ [ driver, specs_and_options ] ]
219
232
  end
220
233
 
221
- def action_handler
222
- @action_handler ||= ActionHandler.new
234
+ def each_current_machine(spec)
235
+ grouped = machine_specs(spec).group_by { |machine_spec| machine_spec.driver_url }
236
+ parallelizer.parallelize(grouped) do |driver_url, machine_specs|
237
+ if driver_url
238
+ driver = ChefMetal.driver_for_url(driver_url)
239
+ specs_and_options = {}
240
+ machine_specs(spec).each do |machine_spec|
241
+ specs_and_options[machine_spec] = driver.config[:machine_options]
242
+ end
243
+ yield driver, specs_and_options
244
+ end
245
+ end.to_a
223
246
  end
224
247
 
225
- def chef_server
226
- {
227
- :chef_server_url => Chef::Config[:chef_server_url],
228
- :options => {
229
- :client_name => Chef::Config[:node_name],
230
- :signing_key_filename => Chef::Config[:client_key]
231
- }
232
- }
248
+ def connect_to_machines(spec)
249
+ grouped = machine_specs(spec).group_by { |machine_spec| machine_spec.driver_url }
250
+ grouped.collect_concat do |driver_url, machine_specs|
251
+ machine_specs.map { |machine_spec| ChefMetal.connect_to_machine(machine_spec) }
252
+ end
253
+ end
254
+
255
+ def parallelizer
256
+ Chef::ChefFS::Parallelizer
257
+ end
258
+
259
+ def action_handler
260
+ @action_handler ||= ActionHandler.new
233
261
  end
234
262
 
235
263
  class ActionHandler < ChefMetal::ActionHandler
@@ -24,12 +24,14 @@ class Chef::Provider::Machine < Chef::Provider::LWRPBase
24
24
  action :ready do
25
25
  action_allocate
26
26
  machine = current_driver.ready_machine(action_handler, machine_spec, machine_options)
27
+ machine_spec.save(action_handler)
27
28
  end
28
29
 
29
30
  action :setup do
30
31
  machine = action_ready
31
32
  begin
32
33
  machine.setup_convergence(action_handler)
34
+ machine_spec.save(action_handler)
33
35
  upload_files(machine)
34
36
  ensure
35
37
  machine.disconnect
@@ -40,6 +42,7 @@ class Chef::Provider::Machine < Chef::Provider::LWRPBase
40
42
  machine = action_ready
41
43
  begin
42
44
  machine.setup_convergence(action_handler)
45
+ machine_spec.save(action_handler)
43
46
  upload_files(machine)
44
47
  # If we were asked to converge, or anything changed, or if a converge has never succeeded, converge.
45
48
  if new_resource.converge || (new_resource.converge.nil? && resource_updated?) ||
@@ -36,6 +36,7 @@ class Chef::Provider::MachineBatch < Chef::Provider::LWRPBase
36
36
  with_ready_machines do |m|
37
37
  prefixed_handler = ChefMetal::AddPrefixActionHandler.new(action_handler, "[#{m[:resource].name}] ")
38
38
  machine[:machine].setup_convergence(prefixed_handler)
39
+ m[:spec].save(action_handler)
39
40
  Chef::Provider::Machine.upload_files(prefixed_handler, m[:machine], m[:resource].files)
40
41
  end
41
42
  end
@@ -44,8 +45,10 @@ class Chef::Provider::MachineBatch < Chef::Provider::LWRPBase
44
45
  with_ready_machines do |m|
45
46
  prefixed_handler = ChefMetal::AddPrefixActionHandler.new(action_handler, "[#{m[:resource].name}] ")
46
47
  m[:machine].setup_convergence(prefixed_handler)
48
+ m[:spec].save(action_handler)
47
49
  Chef::Provider::Machine.upload_files(prefixed_handler, m[:machine], m[:resource].files)
48
50
  m[:machine].converge(prefixed_handler)
51
+ m[:spec].save(action_handler)
49
52
  end
50
53
  end
51
54
 
@@ -66,6 +69,8 @@ class Chef::Provider::MachineBatch < Chef::Provider::LWRPBase
66
69
  by_id = @machines.inject({}) { |hash,m| hash[m[:spec].id] = m; hash }
67
70
  parallel_do(by_new_driver) do |driver, specs_and_options|
68
71
  driver.ready_machines(action_handler, specs_and_options, parallelizer) do |machine|
72
+ machine.machine_spec.save(action_handler)
73
+
69
74
  m = by_id[machine.machine_spec.id]
70
75
 
71
76
  m[:machine] = machine
data/lib/chef_metal.rb CHANGED
@@ -30,14 +30,18 @@ module ChefMetal
30
30
  @@registered_driver_classes[name] = driver
31
31
  end
32
32
 
33
- def self.config_for_url(driver_url, config = Chef::Config)
33
+ def self.config_for_url(driver_url, config = Cheffish.profiled_config)
34
34
  if config && config[:drivers] && config[:drivers][driver_url]
35
35
  config = Cheffish::MergedConfig.new(config[:drivers][driver_url], config)
36
36
  end
37
37
  config || {}
38
38
  end
39
39
 
40
- def self.driver_for_url(driver_url, config = Chef::Config)
40
+ def self.default_driver(config = Cheffish.profiled_config)
41
+ driver_for_url(config[:driver], config)
42
+ end
43
+
44
+ def self.driver_for_url(driver_url, config = Cheffish.profiled_config)
41
45
  cluster_type = driver_url.split(':', 2)[0]
42
46
  require "chef_metal/driver_init/#{cluster_type}"
43
47
  driver_class = @@registered_driver_classes[cluster_type]
@@ -45,7 +49,7 @@ module ChefMetal
45
49
  driver_class.from_url(driver_url, config || {})
46
50
  end
47
51
 
48
- def self.connect_to_machine(machine_spec, config = Chef::Config)
52
+ def self.connect_to_machine(machine_spec, config = Cheffish.profiled_config)
49
53
  driver = driver_for_url(machine_spec.driver_url, config)
50
54
  if driver
51
55
  machine_options = { :convergence_options => { :chef_server => Cheffish.default_chef_server(config) } }
@@ -229,7 +229,7 @@ module ChefMetal
229
229
  end.to_a
230
230
  end
231
231
 
232
- # Acquire machines in batch, in parallel if possible.
232
+ # Ready machines in batch, in parallel if possible.
233
233
  def ready_machines(action_handler, specs_and_options, parallelizer)
234
234
  parallelizer.parallelize(specs_and_options) do |machine_spec, machine_options|
235
235
  machine = ready_machine(add_prefix(machine_spec, action_handler), machine_spec, machine_options)
@@ -259,5 +259,9 @@ module ChefMetal
259
259
  def add_prefix(machine_spec, action_handler)
260
260
  AddPrefixActionHandler.new(action_handler, "[#{machine_spec.name}] ")
261
261
  end
262
+
263
+ def get_private_key(name)
264
+ Cheffish.get_private_key(name, config)
265
+ end
262
266
  end
263
267
  end
@@ -25,6 +25,10 @@ module ChefMetal
25
25
  raise "converge not overridden on #{self.class}"
26
26
  end
27
27
 
28
+ def cleanup_convergence(action_handler)
29
+ raise "cleanup_convergence not overridden on #{self.class}"
30
+ end
31
+
28
32
  def execute(action_handler, command, options = {})
29
33
  raise "execute not overridden on #{self.class}"
30
34
  end
@@ -12,9 +12,6 @@ module ChefMetal
12
12
  attr_reader :transport
13
13
  attr_reader :convergence_strategy
14
14
 
15
- # Sets up everything necessary for convergence to happen on the machine.
16
- # The machine_spec MUST be saved as part of this procedure. Other than that,
17
- # nothing is guaranteed except that converge() will work when this is done.
18
15
  def setup_convergence(action_handler)
19
16
  convergence_strategy.setup_convergence(action_handler, self)
20
17
  end
@@ -23,6 +20,10 @@ module ChefMetal
23
20
  convergence_strategy.converge(action_handler, self)
24
21
  end
25
22
 
23
+ def cleanup_convergence(action_handler)
24
+ convergence_strategy.cleanup_convergence(action_handler, machine_spec)
25
+ end
26
+
26
27
  def execute(action_handler, command, options = {})
27
28
  action_handler.perform_action "run '#{command}' on #{machine_spec.name}" do
28
29
  result = transport.execute(command, options)
@@ -1,3 +1,3 @@
1
1
  module ChefMetal
2
- VERSION = '0.11.beta.2'
2
+ VERSION = '0.11.beta.3'
3
3
  end
metadata CHANGED
@@ -1,83 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-metal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.beta.2
4
+ version: 0.11.beta.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Keiser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-24 00:00:00.000000000 Z
11
+ date: 2014-05-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: net-ssh
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '2.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: net-scp
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '1.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: net-ssh-gateway
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.2.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 1.2.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: inifile
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '2.0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '2.0'
83
83
  - !ruby/object:Gem::Dependency
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: 0.5.beta
89
+ version: 0.5.beta.2
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: 0.5.beta
96
+ version: 0.5.beta.2
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: chef-metal-fog
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -126,28 +126,28 @@ dependencies:
126
126
  name: rspec
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - '>='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - '>='
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rake
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - '>='
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - '>='
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  description: A library for creating machines and infrastructures idempotently in Chef.
@@ -160,10 +160,11 @@ extra_rdoc_files:
160
160
  - CHANGELOG.md
161
161
  - LICENSE
162
162
  files:
163
- - Rakefile
163
+ - CHANGELOG.md
164
164
  - LICENSE
165
165
  - README.md
166
- - CHANGELOG.md
166
+ - Rakefile
167
+ - bin/metal
167
168
  - lib/chef/provider/machine.rb
168
169
  - lib/chef/provider/machine_batch.rb
169
170
  - lib/chef/provider/machine_execute.rb
@@ -172,31 +173,30 @@ files:
172
173
  - lib/chef/resource/machine_batch.rb
173
174
  - lib/chef/resource/machine_execute.rb
174
175
  - lib/chef/resource/machine_file.rb
176
+ - lib/chef_metal.rb
175
177
  - lib/chef_metal/action_handler.rb
176
178
  - lib/chef_metal/add_prefix_action_handler.rb
177
179
  - lib/chef_metal/chef_machine_spec.rb
178
180
  - lib/chef_metal/chef_provider_action_handler.rb
179
181
  - lib/chef_metal/chef_run_data.rb
182
+ - lib/chef_metal/convergence_strategy.rb
180
183
  - lib/chef_metal/convergence_strategy/install_cached.rb
181
184
  - lib/chef_metal/convergence_strategy/install_msi.rb
182
185
  - lib/chef_metal/convergence_strategy/install_sh.rb
183
186
  - lib/chef_metal/convergence_strategy/no_converge.rb
184
187
  - lib/chef_metal/convergence_strategy/precreate_chef_objects.rb
185
- - lib/chef_metal/convergence_strategy.rb
186
188
  - lib/chef_metal/driver.rb
189
+ - lib/chef_metal/machine.rb
187
190
  - lib/chef_metal/machine/basic_machine.rb
188
191
  - lib/chef_metal/machine/unix_machine.rb
189
192
  - lib/chef_metal/machine/windows_machine.rb
190
- - lib/chef_metal/machine.rb
191
193
  - lib/chef_metal/machine_spec.rb
192
194
  - lib/chef_metal/recipe_dsl.rb
195
+ - lib/chef_metal/transport.rb
193
196
  - lib/chef_metal/transport/ssh.rb
194
197
  - lib/chef_metal/transport/winrm.rb
195
- - lib/chef_metal/transport.rb
196
198
  - lib/chef_metal/version.rb
197
- - lib/chef_metal.rb
198
199
  - spec/integration/machine.rb
199
- - bin/metal
200
200
  homepage: http://wiki.opscode.com/display/chef
201
201
  licenses: []
202
202
  metadata: {}
@@ -206,17 +206,17 @@ require_paths:
206
206
  - lib
207
207
  required_ruby_version: !ruby/object:Gem::Requirement
208
208
  requirements:
209
- - - '>='
209
+ - - ">="
210
210
  - !ruby/object:Gem::Version
211
211
  version: '0'
212
212
  required_rubygems_version: !ruby/object:Gem::Requirement
213
213
  requirements:
214
- - - '>'
214
+ - - ">"
215
215
  - !ruby/object:Gem::Version
216
216
  version: 1.3.1
217
217
  requirements: []
218
218
  rubyforge_project:
219
- rubygems_version: 2.0.3
219
+ rubygems_version: 2.2.2
220
220
  signing_key:
221
221
  specification_version: 4
222
222
  summary: A library for creating machines and infrastructures idempotently in Chef.