chef-metal 0.10.2 → 0.11.beta
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/CHANGELOG.md +9 -5
- data/README.md +3 -3
- data/bin/metal +5 -9
- data/lib/chef/provider/machine.rb +81 -32
- data/lib/chef/provider/machine_batch.rb +67 -58
- data/lib/chef/provider/machine_execute.rb +7 -7
- data/lib/chef/provider/machine_file.rb +11 -11
- data/lib/chef/resource/machine.rb +11 -15
- data/lib/chef/resource/machine_batch.rb +1 -1
- data/lib/chef/resource/machine_execute.rb +3 -4
- data/lib/chef/resource/machine_file.rb +3 -4
- data/lib/chef_metal.rb +26 -28
- data/lib/chef_metal/action_handler.rb +9 -7
- data/lib/chef_metal/add_prefix_action_handler.rb +7 -5
- data/lib/chef_metal/chef_machine_spec.rb +64 -0
- data/lib/chef_metal/{provider_action_handler.rb → chef_provider_action_handler.rb} +27 -14
- data/lib/chef_metal/chef_run_data.rb +68 -7
- data/lib/chef_metal/convergence_strategy.rb +14 -3
- data/lib/chef_metal/convergence_strategy/install_cached.rb +24 -10
- data/lib/chef_metal/convergence_strategy/install_msi.rb +17 -10
- data/lib/chef_metal/convergence_strategy/install_sh.rb +20 -10
- data/lib/chef_metal/convergence_strategy/no_converge.rb +20 -13
- data/lib/chef_metal/convergence_strategy/precreate_chef_objects.rb +51 -47
- data/lib/chef_metal/{provider.rb → driver.rb} +103 -79
- data/lib/chef_metal/machine.rb +13 -5
- data/lib/chef_metal/machine/basic_machine.rb +11 -11
- data/lib/chef_metal/machine/unix_machine.rb +6 -6
- data/lib/chef_metal/machine/windows_machine.rb +3 -3
- data/lib/chef_metal/machine_spec.rb +22 -25
- data/lib/chef_metal/recipe_dsl.rb +34 -9
- data/lib/chef_metal/transport.rb +7 -2
- data/lib/chef_metal/transport/ssh.rb +42 -9
- data/lib/chef_metal/transport/winrm.rb +8 -5
- data/lib/chef_metal/version.rb +1 -1
- data/spec/integration/machine.rb +29 -0
- metadata +21 -9
- data/lib/chef_metal/aws_credentials.rb +0 -58
- data/lib/chef_metal/openstack_credentials.rb +0 -44
- data/lib/chef_metal/provisioner.rb +0 -121
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 544a8fd4658a8ad73c179ddd5f804440cb7f3f8e
|
4
|
+
data.tar.gz: ac8690681f379ae779bbc4b7b26d4c68281ec359
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d0f8d6f2f781e577898413a3bcc2cd6c9493dc592b11144ab1764b27f4c1fd5eca28c34571befb510a99790659feb03a0a7c5435cb244a55e262c762414ce041
|
7
|
+
data.tar.gz: 7575521c82702f2be0a9d82a840f71794d63ec3b417c371c8e0fa937452dbdaceb4a881d70f45123a8f73592a46524ce5ab37ef35daf8b69c22eb69fe64f91b1
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Chef Metal Changelog
|
2
2
|
|
3
|
+
## 0.11.beta (5/23/2014)
|
4
|
+
|
5
|
+
- New Driver interface (see docs/ and blogs/ directories for documentation)
|
6
|
+
|
3
7
|
## 0.10.2 (5/2/2014)
|
4
8
|
|
5
9
|
- Fix crash with add_provisioner_options when provisioner_options is not yet set
|
@@ -72,11 +76,11 @@
|
|
72
76
|
## 0.5 (4/3/2014)
|
73
77
|
|
74
78
|
* Provisioner interface changes designed to allow provisioners to be used outside of Chef (doubt@getchef.com)
|
75
|
-
* All Provisioner and Machine methods now take "action_handler" instead of "
|
76
|
-
-
|
77
|
-
-
|
78
|
-
-
|
79
|
-
-
|
79
|
+
* All Provisioner and Machine methods now take "action_handler" instead of "driver." It uses the ActionHandler interface described in action_handler.rb. In short:
|
80
|
+
- driver.run_context -> action_handler.recipe_context
|
81
|
+
- driver.updated_by_last_action(true) -> action_handler.updated!
|
82
|
+
- driver.converge_by -> action_handler.perform_action
|
83
|
+
- driver.cookbook_name -> driver.debug_name
|
80
84
|
* Convergence strategy: delete_chef_objects() -> cleanup_convergence()
|
81
85
|
* Ability to get back to a machine from a node (another Provisioner interface change) (doubt@getchef.com):
|
82
86
|
* Provisioners must create a file named `chef_metal/provisioner_init/<scheme>_init.rb`. It will be required when a node is encountered with that scheme. It should call ChefMetal.add_registered_provisioner_class(<scheme>, <provisioner class name>). For the provisioner_url `fog:AWS:21348723432`, the scheme is "fog" and the file is `chef_metalprovisioner_init/fog_init.rb`. It should call `ChefMetal.add_registered_provisioner_class('fog', ChefMetal::Provisioner::FogProvisioner)`.
|
data/README.md
CHANGED
@@ -89,7 +89,7 @@ Provisioners each have their own repository. Current provisioners:
|
|
89
89
|
|
90
90
|
### Vagrant
|
91
91
|
|
92
|
-
chef-zero comes with a provisioner for Vagrant, an abstraction that covers VirtualBox, VMWare and other Virtual Machine
|
92
|
+
chef-zero comes with a provisioner for Vagrant, an abstraction that covers VirtualBox, VMWare and other Virtual Machine drivers. To run it, you can check out the sample recipes with:
|
93
93
|
|
94
94
|
```
|
95
95
|
chef-client -z -o myapp::vagrant,myapp::linux,myapp::small
|
@@ -144,7 +144,7 @@ end
|
|
144
144
|
|
145
145
|
### Fog (EC2 and friends)
|
146
146
|
|
147
|
-
chef-metal also comes with a [Fog](http://fog.io/) provisioner that handles provisioning to Amazon's EC2 and other cloud
|
147
|
+
chef-metal also comes with a [Fog](http://fog.io/) provisioner that handles provisioning to Amazon's EC2 and other cloud drivers. (Only EC2 has been tested so far.) Before you begin, you will need to put your AWS credentials in ~/.aws/config in the format [mentioned in Option 1 here](http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#d0e726).
|
148
148
|
|
149
149
|
Once your credentials are in, basic usage looks like this:
|
150
150
|
|
@@ -159,7 +159,7 @@ ec2testdir = File.expand_path('~/ec2test')
|
|
159
159
|
|
160
160
|
directory ec2testdir
|
161
161
|
|
162
|
-
with_fog_ec2_provisioner # :
|
162
|
+
with_fog_ec2_provisioner # :driver => 'AWS'
|
163
163
|
|
164
164
|
with_provisioner_options :image_id => 'ami-5ee70037'
|
165
165
|
|
data/bin/metal
CHANGED
@@ -134,22 +134,22 @@ class ChefMetal::Application < Chef::Application
|
|
134
134
|
end
|
135
135
|
when 'converge'
|
136
136
|
each_machine(cli_arguments.shift) do |machine, provisioner|
|
137
|
-
machine.converge(action_handler
|
137
|
+
machine.converge(action_handler)
|
138
138
|
end
|
139
139
|
when 'delete'
|
140
140
|
each_machine(cli_arguments.shift) do |machine, provisioner|
|
141
|
-
provisioner.delete_machine(action_handler, machine.
|
141
|
+
provisioner.delete_machine(action_handler, machine.machine_spec)
|
142
142
|
end
|
143
143
|
when 'update'
|
144
144
|
each_machine(cli_arguments.shift) do |machine, provisioner|
|
145
|
-
machine = provisioner.acquire_machine(action_handler, machine.
|
145
|
+
machine = provisioner.acquire_machine(action_handler, machine.machine_spec)
|
146
146
|
# TODO find out what files were uploaded so we can do it again
|
147
147
|
machine.setup_convergence(action_handler)
|
148
|
-
machine.converge(action_handler
|
148
|
+
machine.converge(action_handler)
|
149
149
|
end
|
150
150
|
when 'stop'
|
151
151
|
each_machine(cli_arguments.shift) do |machine, provisioner|
|
152
|
-
provisioner.stop_machine(action_handler, machine.
|
152
|
+
provisioner.stop_machine(action_handler, machine.machine_spec)
|
153
153
|
end
|
154
154
|
when 'cat'
|
155
155
|
each_machine(cli_arguments.shift) do |machine, provisioner|
|
@@ -242,10 +242,6 @@ class ChefMetal::Application < Chef::Application
|
|
242
242
|
Chef::RunContext.new(node, {},
|
243
243
|
Chef::EventDispatch::Dispatcher.new(Chef::Formatters::Doc.new(STDOUT,STDERR)))
|
244
244
|
end
|
245
|
-
|
246
|
-
def debug_name
|
247
|
-
'metal'
|
248
|
-
end
|
249
245
|
end
|
250
246
|
end
|
251
247
|
|
@@ -1,11 +1,14 @@
|
|
1
1
|
require 'chef/provider/lwrp_base'
|
2
2
|
require 'chef/provider/chef_node'
|
3
3
|
require 'openssl'
|
4
|
-
require 'chef_metal/
|
4
|
+
require 'chef_metal/chef_provider_action_handler'
|
5
|
+
require 'chef_metal/chef_machine_spec'
|
5
6
|
|
6
7
|
class Chef::Provider::Machine < Chef::Provider::LWRPBase
|
7
8
|
|
8
|
-
|
9
|
+
def action_handler
|
10
|
+
@action_handler ||= ChefMetal::ChefProviderActionHandler.new(self)
|
11
|
+
end
|
9
12
|
|
10
13
|
use_inline_resources
|
11
14
|
|
@@ -13,59 +16,105 @@ class Chef::Provider::Machine < Chef::Provider::LWRPBase
|
|
13
16
|
true
|
14
17
|
end
|
15
18
|
|
16
|
-
action :
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
action :allocate do
|
20
|
+
new_driver.allocate_machine(action_handler, machine_spec, machine_options)
|
21
|
+
machine_spec.save(action_handler)
|
22
|
+
end
|
23
|
+
|
24
|
+
action :ready do
|
25
|
+
action_allocate
|
26
|
+
machine = current_driver.ready_machine(action_handler, machine_spec, machine_options)
|
27
|
+
end
|
28
|
+
|
29
|
+
action :setup do
|
30
|
+
machine = action_ready
|
31
|
+
begin
|
32
|
+
machine.setup_convergence(action_handler)
|
33
|
+
upload_files(machine)
|
34
|
+
ensure
|
35
|
+
machine.disconnect
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
action :converge do
|
40
|
+
machine = action_ready
|
22
41
|
begin
|
23
|
-
machine.setup_convergence(
|
42
|
+
machine.setup_convergence(action_handler)
|
24
43
|
upload_files(machine)
|
25
44
|
# If we were asked to converge, or anything changed, or if a converge has never succeeded, converge.
|
26
45
|
if new_resource.converge || (new_resource.converge.nil? && resource_updated?) ||
|
27
|
-
!
|
28
|
-
machine.converge(
|
46
|
+
!machine_spec.node['automatic'] || machine_spec.node['automatic'].size == 0
|
47
|
+
machine.converge(action_handler)
|
29
48
|
end
|
30
49
|
ensure
|
31
50
|
machine.disconnect
|
32
51
|
end
|
33
52
|
end
|
34
53
|
|
35
|
-
action :
|
36
|
-
|
37
|
-
node_json['normal']['provisioner_options'] = new_resource.provisioner_options
|
38
|
-
# Preserve provisioner_output, whatever the cost
|
39
|
-
node_json['normal']['provisioner_output'] = node_provider.current_json['normal']['provisioner_output']
|
40
|
-
machine = new_resource.provisioner.connect_to_machine(node_json)
|
54
|
+
action :converge_only do
|
55
|
+
machine = run_context.chef_metal.connect_to_machine(machine_spec, machine_options)
|
41
56
|
begin
|
42
|
-
machine.converge(
|
57
|
+
machine.converge(action_handler)
|
43
58
|
ensure
|
44
59
|
machine.disconnect
|
45
60
|
end
|
46
61
|
end
|
47
62
|
|
48
63
|
action :stop do
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
64
|
+
if current_driver
|
65
|
+
current_driver.stop_machine(action_handler, machine_spec, machine_options)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
action :destroy do
|
70
|
+
if current_driver
|
71
|
+
current_driver.destroy_machine(action_handler, machine_spec, machine_options)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def new_driver
|
76
|
+
run_context.chef_metal.driver_for(new_resource.driver)
|
54
77
|
end
|
55
78
|
|
56
|
-
|
57
|
-
|
58
|
-
|
79
|
+
def new_driver_config
|
80
|
+
run_context.chef_metal.driver_config_for(new_resource.driver)
|
81
|
+
end
|
59
82
|
|
60
|
-
|
61
|
-
|
83
|
+
def current_driver
|
84
|
+
if machine_spec.driver_url
|
85
|
+
run_context.chef_metal.driver_for_url(machine_spec.driver_url)
|
86
|
+
end
|
62
87
|
end
|
63
88
|
|
64
|
-
attr_reader :
|
89
|
+
attr_reader :machine_spec
|
90
|
+
|
91
|
+
def machine_options
|
92
|
+
configs = []
|
93
|
+
configs << {
|
94
|
+
:convergence_options =>
|
95
|
+
[ :chef_server,
|
96
|
+
:allow_overwrite_keys,
|
97
|
+
:source_key, :source_key_path, :source_key_pass_phrase,
|
98
|
+
:private_key_options,
|
99
|
+
:ohai_hints,
|
100
|
+
:public_key_path, :public_key_format,
|
101
|
+
:admin, :validator
|
102
|
+
].inject({}) do |result, key|
|
103
|
+
result[key] = new_resource.send(key)
|
104
|
+
result
|
105
|
+
end
|
106
|
+
}
|
107
|
+
configs << new_resource.machine_options if new_resource.machine_options
|
108
|
+
configs << new_driver_config[:machine_options] if new_driver_config[:machine_options]
|
109
|
+
Cheffish::MergedConfig.new(*configs)
|
110
|
+
end
|
65
111
|
|
66
112
|
def load_current_resource
|
67
|
-
|
68
|
-
|
113
|
+
node_driver = Chef::Provider::ChefNode.new(new_resource, run_context)
|
114
|
+
node_driver.load_current_resource
|
115
|
+
json = node_driver.new_json
|
116
|
+
json['normal']['metal'] = node_driver.current_json['normal']['metal']
|
117
|
+
@machine_spec = ChefMetal::ChefMachineSpec.new(json, new_resource.chef_server)
|
69
118
|
end
|
70
119
|
|
71
120
|
def self.upload_files(action_handler, machine, files)
|
@@ -87,6 +136,6 @@ class Chef::Provider::Machine < Chef::Provider::LWRPBase
|
|
87
136
|
private
|
88
137
|
|
89
138
|
def upload_files(machine)
|
90
|
-
Machine.upload_files(
|
139
|
+
Machine.upload_files(action_handler, machine, new_resource.files)
|
91
140
|
end
|
92
141
|
end
|
@@ -1,12 +1,14 @@
|
|
1
1
|
require 'chef/chef_fs/parallelizer'
|
2
2
|
require 'chef/provider/lwrp_base'
|
3
3
|
require 'chef/provider/machine'
|
4
|
-
require 'chef_metal/
|
4
|
+
require 'chef_metal/chef_provider_action_handler'
|
5
5
|
require 'chef_metal/add_prefix_action_handler'
|
6
6
|
|
7
7
|
class Chef::Provider::MachineBatch < Chef::Provider::LWRPBase
|
8
8
|
|
9
|
-
|
9
|
+
def action_handler
|
10
|
+
@action_handler ||= ChefMetal::ChefProviderActionHandler.new(self)
|
11
|
+
end
|
10
12
|
|
11
13
|
use_inline_resources
|
12
14
|
|
@@ -18,64 +20,59 @@ class Chef::Provider::MachineBatch < Chef::Provider::LWRPBase
|
|
18
20
|
@parallelizer ||= Chef::ChefFS::Parallelizer.new(new_resource.max_simultaneous || 100)
|
19
21
|
end
|
20
22
|
|
21
|
-
action :
|
22
|
-
|
23
|
+
action :allocate do
|
24
|
+
by_new_driver.each do |driver, specs_and_options|
|
25
|
+
driver.allocate_machines(action_handler, specs_and_options, parallelizer) do |machine_spec|
|
26
|
+
machine_spec.save(action_handler)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
action :ready do
|
32
|
+
with_ready_machines
|
23
33
|
end
|
24
34
|
|
25
35
|
action :setup do
|
26
|
-
|
27
|
-
prefixed_handler = ChefMetal::AddPrefixActionHandler.new(
|
28
|
-
machine[:machine].setup_convergence(prefixed_handler
|
29
|
-
Chef::Provider::Machine.upload_files(prefixed_handler,
|
36
|
+
with_ready_machines do |m|
|
37
|
+
prefixed_handler = ChefMetal::AddPrefixActionHandler.new(action_handler, "[#{m[:resource].name}] ")
|
38
|
+
machine[:machine].setup_convergence(prefixed_handler)
|
39
|
+
Chef::Provider::Machine.upload_files(prefixed_handler, m[:machine], m[:resource].files)
|
30
40
|
end
|
31
41
|
end
|
32
42
|
|
33
43
|
action :converge do
|
34
|
-
|
35
|
-
prefixed_handler = ChefMetal::AddPrefixActionHandler.new(
|
36
|
-
|
37
|
-
Chef::Provider::Machine.upload_files(prefixed_handler,
|
38
|
-
|
44
|
+
with_ready_machines do |m|
|
45
|
+
prefixed_handler = ChefMetal::AddPrefixActionHandler.new(action_handler, "[#{m[:resource].name}] ")
|
46
|
+
m[:machine].setup_convergence(prefixed_handler)
|
47
|
+
Chef::Provider::Machine.upload_files(prefixed_handler, m[:machine], m[:resource].files)
|
48
|
+
m[:machine].converge(prefixed_handler)
|
39
49
|
end
|
40
50
|
end
|
41
51
|
|
42
52
|
action :stop do
|
43
|
-
parallel_do(
|
44
|
-
|
53
|
+
parallel_do(by_current_driver) do |driver, specs_and_options|
|
54
|
+
driver.stop_machines(action_handler, specs_and_options, parallelizer)
|
45
55
|
end
|
46
56
|
end
|
47
57
|
|
48
|
-
action :
|
49
|
-
parallel_do(
|
50
|
-
|
58
|
+
action :destroy do
|
59
|
+
parallel_do(by_current_driver) do |driver, specs_and_options|
|
60
|
+
driver.destroy_machines(action_handler, specs_and_options, parallelizer)
|
51
61
|
end
|
52
62
|
end
|
53
63
|
|
54
|
-
def
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
machine[:node]['normal']['provisioner_options'] = machine[:resource].provisioner_options
|
61
|
-
machine[:node]['normal']['provisioner_output'] = machine[:provider].node_provider.current_json['normal']['provisioner_output']
|
62
|
-
machine
|
63
|
-
end
|
64
|
-
|
65
|
-
# TODO I don't understand why the object_id hack was necessary. Using the
|
66
|
-
# node as a key didn't work. If we could pass node_urls through acquire_machines,
|
67
|
-
# that would solve the problem in a bestest way (nodes themselves are not
|
68
|
-
# necessarily unique without knowing the chef_server with which they are
|
69
|
-
# associated)
|
70
|
-
by_node_json = machines.inject({}) { |result, machine| result[machine[:node].object_id] = machine; result }
|
71
|
-
provisioner.acquire_machines(self, by_node_json.values.map { |m| m[:node] }, parallelizer) do |node_json, machine_obj|
|
72
|
-
machine = by_node_json[node_json.object_id]
|
64
|
+
def with_ready_machines
|
65
|
+
action_allocate
|
66
|
+
by_id = @machines.inject({}) { |hash,m| hash[m[:spec].id] = m; hash }
|
67
|
+
parallel_do(by_new_driver) do |driver, specs_and_options|
|
68
|
+
driver.ready_machines(action_handler, specs_and_options, parallelizer) do |machine|
|
69
|
+
m = by_id[machine.machine_spec.id]
|
73
70
|
|
74
|
-
|
71
|
+
m[:machine] = machine
|
75
72
|
begin
|
76
|
-
yield
|
73
|
+
yield m if block_given?
|
77
74
|
ensure
|
78
|
-
|
75
|
+
machine.disconnect
|
79
76
|
end
|
80
77
|
end
|
81
78
|
end
|
@@ -88,29 +85,41 @@ class Chef::Provider::MachineBatch < Chef::Provider::LWRPBase
|
|
88
85
|
parallelizer.parallelize(enum, options, &block).to_a
|
89
86
|
end
|
90
87
|
|
91
|
-
def
|
92
|
-
|
88
|
+
def by_new_driver
|
89
|
+
result = {}
|
90
|
+
@machines.each do |m|
|
91
|
+
if m[:resource].driver
|
92
|
+
driver = run_context.chef_metal.driver_for(m[:resource].driver)
|
93
|
+
result[driver] ||= {}
|
94
|
+
result[driver][m[:spec]] = m[:options]
|
95
|
+
end
|
96
|
+
end
|
97
|
+
result
|
98
|
+
end
|
99
|
+
|
100
|
+
def by_current_driver
|
101
|
+
result = {}
|
102
|
+
@machines.each do |m|
|
103
|
+
if m[:spec].driver_url
|
104
|
+
driver = run_context.chef_metal.driver_for_url(m[:spec].driver_url)
|
105
|
+
result[driver] ||= {}
|
106
|
+
result[driver][m[:spec]] = m[:options]
|
107
|
+
end
|
108
|
+
end
|
109
|
+
result
|
93
110
|
end
|
94
111
|
|
95
112
|
def load_current_resource
|
96
|
-
#
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
next if @by_node.has_key?(node_url(machine_resource))
|
102
|
-
next unless Array(machine_resource.action).include?(:create)
|
103
|
-
@by_node[node_url(machine_resource)] = {
|
113
|
+
# Load nodes in parallel
|
114
|
+
@machines = parallel_do(new_resource.machines) do |machine_resource|
|
115
|
+
provider = Chef::Provider::Machine.new(machine_resource, machine_resource.run_context)
|
116
|
+
provider.load_current_resource
|
117
|
+
{
|
104
118
|
:resource => machine_resource,
|
105
|
-
:
|
119
|
+
:spec => provider.machine_spec,
|
120
|
+
:options => provider.machine_options
|
106
121
|
}
|
107
|
-
|
108
|
-
@by_provisioner[machine_resource.provisioner] << node_url(machine_resource)
|
109
|
-
end
|
110
|
-
# Load nodes in parallel
|
111
|
-
parallel_do(@by_node.values) do |machine|
|
112
|
-
machine[:provider].load_current_resource
|
113
|
-
end
|
122
|
+
end.to_a
|
114
123
|
end
|
115
124
|
|
116
125
|
end
|
@@ -1,10 +1,12 @@
|
|
1
1
|
require 'chef/provider/lwrp_base'
|
2
|
-
require '
|
3
|
-
require 'chef_metal/
|
2
|
+
require 'chef_metal/chef_provider_action_handler'
|
3
|
+
require 'chef_metal/machine'
|
4
4
|
|
5
5
|
class Chef::Provider::MachineExecute < Chef::Provider::LWRPBase
|
6
6
|
|
7
|
-
|
7
|
+
def action_handler
|
8
|
+
@action_handler ||= ChefMetal::ChefProviderActionHandler.new(self)
|
9
|
+
end
|
8
10
|
|
9
11
|
use_inline_resources
|
10
12
|
|
@@ -17,14 +19,12 @@ class Chef::Provider::MachineExecute < Chef::Provider::LWRPBase
|
|
17
19
|
if new_resource.machine.kind_of?(ChefMetal::Machine)
|
18
20
|
new_resource.machine
|
19
21
|
else
|
20
|
-
|
21
|
-
node = Cheffish::CheffishServerAPI.new(new_resource.chef_server).get("/nodes/#{new_resource.machine}")
|
22
|
-
new_resource.provisioner.connect_to_machine(node)
|
22
|
+
run_context.chef_metal.connect_to_machine(new_resource.machine, new_resource.chef_server)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
action :run do
|
28
|
-
machine.execute(
|
28
|
+
machine.execute(action_handler, new_resource.command)
|
29
29
|
end
|
30
30
|
end
|