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

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
  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.