chef-metal 0.10.2 → 0.11.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -5
  3. data/README.md +3 -3
  4. data/bin/metal +5 -9
  5. data/lib/chef/provider/machine.rb +81 -32
  6. data/lib/chef/provider/machine_batch.rb +67 -58
  7. data/lib/chef/provider/machine_execute.rb +7 -7
  8. data/lib/chef/provider/machine_file.rb +11 -11
  9. data/lib/chef/resource/machine.rb +11 -15
  10. data/lib/chef/resource/machine_batch.rb +1 -1
  11. data/lib/chef/resource/machine_execute.rb +3 -4
  12. data/lib/chef/resource/machine_file.rb +3 -4
  13. data/lib/chef_metal.rb +26 -28
  14. data/lib/chef_metal/action_handler.rb +9 -7
  15. data/lib/chef_metal/add_prefix_action_handler.rb +7 -5
  16. data/lib/chef_metal/chef_machine_spec.rb +64 -0
  17. data/lib/chef_metal/{provider_action_handler.rb → chef_provider_action_handler.rb} +27 -14
  18. data/lib/chef_metal/chef_run_data.rb +68 -7
  19. data/lib/chef_metal/convergence_strategy.rb +14 -3
  20. data/lib/chef_metal/convergence_strategy/install_cached.rb +24 -10
  21. data/lib/chef_metal/convergence_strategy/install_msi.rb +17 -10
  22. data/lib/chef_metal/convergence_strategy/install_sh.rb +20 -10
  23. data/lib/chef_metal/convergence_strategy/no_converge.rb +20 -13
  24. data/lib/chef_metal/convergence_strategy/precreate_chef_objects.rb +51 -47
  25. data/lib/chef_metal/{provider.rb → driver.rb} +103 -79
  26. data/lib/chef_metal/machine.rb +13 -5
  27. data/lib/chef_metal/machine/basic_machine.rb +11 -11
  28. data/lib/chef_metal/machine/unix_machine.rb +6 -6
  29. data/lib/chef_metal/machine/windows_machine.rb +3 -3
  30. data/lib/chef_metal/machine_spec.rb +22 -25
  31. data/lib/chef_metal/recipe_dsl.rb +34 -9
  32. data/lib/chef_metal/transport.rb +7 -2
  33. data/lib/chef_metal/transport/ssh.rb +42 -9
  34. data/lib/chef_metal/transport/winrm.rb +8 -5
  35. data/lib/chef_metal/version.rb +1 -1
  36. data/spec/integration/machine.rb +29 -0
  37. metadata +21 -9
  38. data/lib/chef_metal/aws_credentials.rb +0 -58
  39. data/lib/chef_metal/openstack_credentials.rb +0 -44
  40. data/lib/chef_metal/provisioner.rb +0 -121
@@ -1,19 +1,80 @@
1
- require 'cheffish/with_pattern'
2
1
  require 'chef/mixin/deep_merge'
2
+ require 'cheffish/with_pattern'
3
+ require 'cheffish/merged_config'
4
+ require 'chef_metal/chef_machine_spec'
3
5
 
4
6
  module ChefMetal
5
7
  class ChefRunData
6
8
  extend Cheffish::WithPattern
7
- with :provisioner
8
- with :provisioner_options
9
+ def initialize(config)
10
+ @config = config
11
+ @drivers = {}
12
+ end
13
+
14
+ attr_reader :config
15
+ attr_reader :drivers
16
+
17
+ with :driver
18
+ with :machine_options
9
19
  with :machine_batch
10
20
 
11
- def add_provisioner_options(options, &block)
12
- if current_provisioner_options
13
- with_provisioner_options(Chef::Mixin::DeepMerge.hash_only_merge(current_provisioner_options, options), &block)
21
+ def current_driver
22
+ @current_driver || config[:driver]
23
+ end
24
+
25
+ def current_machine_options
26
+ if @current_machine_options
27
+ @current_machine_options
28
+ elsif config[:drivers] && driver_for(current_driver) && config[:drivers][driver_for(current_driver).driver_url]
29
+ Cheffish::MergedConfig.new(config[:drivers][driver_for(current_driver).driver_url], config)[:machine_options] || {}
14
30
  else
15
- with_provisioner_options(options)
31
+ config[:machine_options] || {}
32
+ end
33
+ end
34
+
35
+ def add_machine_options(options, &block)
36
+ with_machine_options(Chef::Mixin::DeepMerge.hash_only_merge(current_machine_options, options), &block)
37
+ end
38
+
39
+ def driver_for(driver)
40
+ driver.is_a?(String) ? driver_for_url(driver) : driver
41
+ end
42
+
43
+ def driver_config_for(driver)
44
+ ChefMetal.config_for_url(driver_for(driver).driver_url, config)
45
+ end
46
+
47
+ def driver_for_url(driver_url)
48
+ drivers[driver_url] ||= begin
49
+ driver = ChefMetal.driver_for_url(driver_url, config)
50
+ # Check the canonicalized driver_url from the driver
51
+ if driver.driver_url != driver_url
52
+ drivers[driver.driver_url] ||= driver
53
+ else
54
+ driver
55
+ end
56
+ end
57
+ end
58
+
59
+ def connect_to_machine(name, chef_server = nil)
60
+ if name.is_a?(MachineSpec)
61
+ machine_spec = name
62
+ else
63
+ machine_spec = ChefMetal::ChefMachineSpec.get(name, chef_server)
64
+ end
65
+ ChefMetal.connect_to_machine(machine_spec, config)
66
+ end
67
+
68
+ def keys
69
+ result = (config.keys || {}).dup
70
+ Array(config.key_path) do |key_path|
71
+ Dir.entries(key_path).each do |key|
72
+ if File.extname(key) == '.pem'
73
+ result[File.basename(key)[0..-5]] ||= key
74
+ end
75
+ end
16
76
  end
77
+ result
17
78
  end
18
79
  end
19
80
  end
@@ -1,14 +1,25 @@
1
1
  module ChefMetal
2
2
  class ConvergenceStrategy
3
- def setup_convergence(action_handler, machine, machine_resource)
3
+ # convergence_options - a freeform hash of options to the converger.
4
+ # config - a Chef::Config-like object with global config like :log_level
5
+ def initialize(convergence_options, config)
6
+ @convergence_options = convergence_options || {}
7
+ @config = config
8
+ end
9
+
10
+ attr_reader :convergence_options
11
+ attr_reader :config
12
+
13
+ # Get the machine ready to converge, but do not converge.
14
+ def setup_convergence(action_handler, machine)
4
15
  raise "setup_convergence not overridden on #{self.class}"
5
16
  end
6
17
 
7
- def converge(action_handler, machine, chef_server)
18
+ def converge(action_handler, machine)
8
19
  raise "converge not overridden on #{self.class}"
9
20
  end
10
21
 
11
- def cleanup_convergence(action_handler, node)
22
+ def cleanup_convergence(action_handler, machine_spec)
12
23
  raise "cleanup_convergence not overridden on #{self.class}"
13
24
  end
14
25
  end
@@ -7,20 +7,32 @@ require 'thread'
7
7
  module ChefMetal
8
8
  class ConvergenceStrategy
9
9
  class InstallCached < PrecreateChefObjects
10
- def initialize(options = {})
11
- @client_rb_path ||= '/etc/chef/client.rb'
12
- @client_pem_path ||= '/etc/chef/client.pem'
13
- @chef_version ||= options[:chef_version]
14
- @prerelease ||= options[:prerelease]
15
- @package_cache_path ||= options[:package_cache_path] || "#{ENV['HOME']}/.chef/package_cache"
10
+ # convergence_options is a hash of setup convergence_options, including:
11
+ # - :chef_server
12
+ # - :allow_overwrite_keys
13
+ # - :source_key, :source_key_path, :source_key_pass_phrase
14
+ # - :private_key_options
15
+ # - :ohai_hints
16
+ # - :public_key_path, :public_key_format
17
+ # - :admin, :validator
18
+ # - :chef_client_timeout
19
+ # - :client_rb_path, :client_pem_path
20
+ # - :chef_version, :prerelease, :package_cache_path
21
+ def initialize(convergence_options, config)
22
+ super
23
+ @convergence_options[:client_rb_path] ||= '/etc/chef/client.rb'
24
+ @convergence_options[:client_pem_path] ||= '/etc/chef/client.pem'
25
+ @chef_version ||= convergence_options[:chef_version]
26
+ @prerelease ||= convergence_options[:prerelease]
27
+ @package_cache_path ||= convergence_options[:package_cache_path] || "#{ENV['HOME']}/.chef/package_cache"
16
28
  @package_cache = {}
17
29
  @tmp_dir = '/tmp'
18
- @chef_client_timeout = options.has_key?(:chef_client_timeout) ? options[:chef_client_timeout] : 120*60 # Default: 2 hours
30
+ @chef_client_timeout = convergence_options.has_key?(:chef_client_timeout) ? convergence_options[:chef_client_timeout] : 120*60 # Default: 2 hours
19
31
  FileUtils.mkdir_p(@package_cache_path)
20
32
  @package_cache_lock = Mutex.new
21
33
  end
22
34
 
23
- def setup_convergence(action_handler, machine, machine_resource)
35
+ def setup_convergence(action_handler, machine)
24
36
  super
25
37
 
26
38
  # Install chef-client. TODO check and update version if not latest / not desired
@@ -33,12 +45,14 @@ module ChefMetal
33
45
  end
34
46
  end
35
47
 
36
- def converge(action_handler, machine, chef_server)
48
+ def converge(action_handler, machine)
37
49
  super
38
50
 
39
51
  action_handler.open_stream(machine.node['name']) do |stdout|
40
52
  action_handler.open_stream(machine.node['name']) do |stderr|
41
- machine.execute(action_handler, "chef-client -l #{Chef::Config.log_level.to_s}",
53
+ command_line = "chef-client"
54
+ command_line << "-l #{config[:log_level].to_s}" if config[:log_level]
55
+ machine.execute(action_handler, "chef-client",
42
56
  :stream_stdout => stdout,
43
57
  :stream_stderr => stderr,
44
58
  :timeout => @chef_client_timeout)
@@ -6,19 +6,19 @@ module ChefMetal
6
6
  class InstallMsi < PrecreateChefObjects
7
7
  @@install_msi_cache = {}
8
8
 
9
- def initialize(options = {})
10
- @install_msi_url = options[:install_msi_url] || 'http://www.opscode.com/chef/install.msi'
11
- @install_msi_path = options[:install_msi_path] || "%TEMP%\\#{File.basename(@install_msi_url)}"
12
- @chef_client_timeout = options.has_key?(:chef_client_timeout) ? options[:chef_client_timeout] : 120*60 # Default: 2 hours
9
+ def initialize(convergence_options, config)
10
+ @install_msi_url = convergence_options[:install_msi_url] || 'http://www.opscode.com/chef/install.msi'
11
+ @install_msi_path = convergence_options[:install_msi_path] || "%TEMP%\\#{File.basename(@install_msi_url)}"
12
+ @chef_client_timeout = convergence_options.has_key?(:chef_client_timeout) ? convergence_options[:chef_client_timeout] : 120*60 # Default: 2 hours
13
13
  end
14
14
 
15
15
  attr_reader :install_msi_url
16
16
  attr_reader :install_msi_path
17
17
 
18
- def setup_convergence(action_handler, machine, machine_resource)
18
+ def setup_convergence(action_handler, machine)
19
19
  system_drive = machine.execute_always('$env:SystemDrive').stdout.strip
20
- @client_rb_path ||= "#{system_drive}\\chef\\client.rb"
21
- @client_pem_path ||= "#{system_drive}\\chef\\client.pem"
20
+ convergence_options[:client_rb_path] ||= "#{system_drive}\\chef\\client.rb"
21
+ convergence_options[:client_pem_path] ||= "#{system_drive}\\chef\\client.pem"
22
22
 
23
23
  super
24
24
 
@@ -33,11 +33,18 @@ module ChefMetal
33
33
  end
34
34
  end
35
35
 
36
- def converge(action_handler, machine, chef_server)
36
+ def converge(action_handler, machine)
37
37
  super
38
-
38
+
39
39
  # TODO For some reason I get a 500 back if I don't do -l debug
40
- machine.execute(action_handler, "chef-client -l debug", :stream => true, :timeout => @chef_client_timeout)
40
+ action_handler.open_stream(machine.node['name']) do |stdout|
41
+ action_handler.open_stream(machine.node['name']) do |stderr|
42
+ machine.execute(action_handler, "chef-client -l debug",
43
+ :stream_stdout => stdout,
44
+ :stream_stderr => stderr,
45
+ :timeout => @chef_client_timeout)
46
+ end
47
+ end
41
48
  end
42
49
  end
43
50
  end
@@ -6,18 +6,19 @@ module ChefMetal
6
6
  class InstallSh < PrecreateChefObjects
7
7
  @@install_sh_cache = {}
8
8
 
9
- def initialize(options = {})
10
- @install_sh_url = options[:install_sh_url] || 'http://www.opscode.com/chef/install.sh'
11
- @install_sh_path = options[:install_sh_path] || '/tmp/chef-install.sh'
12
- @client_rb_path ||= '/etc/chef/client.rb'
13
- @client_pem_path ||= '/etc/chef/client.pem'
14
- @chef_client_timeout = options.has_key?(:chef_client_timeout) ? options[:chef_client_timeout] : 120*60 # Default: 2 hours
9
+ def initialize(convergence_options, config)
10
+ super
11
+ @install_sh_url = convergence_options[:install_sh_url] || 'http://www.opscode.com/chef/install.sh'
12
+ @install_sh_path = convergence_options[:install_sh_path] || '/tmp/chef-install.sh'
13
+ @convergence_options[:client_rb_path] ||= '/etc/chef/client.rb'
14
+ @convergence_options[:client_pem_path] ||= '/etc/chef/client.pem'
15
+ @chef_client_timeout = convergence_options.has_key?(:chef_client_timeout) ? convergence_options[:chef_client_timeout] : 120*60 # Default: 2 hours
15
16
  end
16
17
 
17
18
  attr_reader :install_sh_url
18
19
  attr_reader :install_sh_path
19
20
 
20
- def setup_convergence(action_handler, machine, machine_resource)
21
+ def setup_convergence(action_handler, machine)
21
22
  super
22
23
 
23
24
  # Install chef-client. TODO check and update version if not latest / not desired
@@ -29,10 +30,19 @@ module ChefMetal
29
30
  end
30
31
  end
31
32
 
32
- def converge(action_handler, machine, chef_server)
33
+ def converge(action_handler, machine)
33
34
  super
34
-
35
- machine.execute(action_handler, "chef-client -l #{Chef::Config.log_level.to_s}", :stream => true, :timeout => @chef_client_timeout)
35
+
36
+ action_handler.open_stream(machine.node['name']) do |stdout|
37
+ action_handler.open_stream(machine.node['name']) do |stderr|
38
+ command_line = "chef-client"
39
+ command_line << "-l #{config[:log_level].to_s}" if config[:log_level]
40
+ machine.execute(action_handler, command_line,
41
+ :stream_stdout => stdout,
42
+ :stream_stderr => stderr,
43
+ :timeout => @chef_client_timeout)
44
+ end
45
+ end
36
46
  end
37
47
  end
38
48
  end
@@ -5,23 +5,30 @@ require 'cheffish'
5
5
  module ChefMetal
6
6
  class ConvergenceStrategy
7
7
  class NoConverge < ConvergenceStrategy
8
- attr_reader :client_rb_path
9
- attr_reader :client_pem_path
8
+ def initialize(convergence_options, config)
9
+ super
10
+ end
10
11
 
11
- def setup_convergence(action_handler, machine, machine_resource)
12
- # Save the node
13
- ChefMetal.inline_resource(action_handler) do
14
- # TODO strip automatic attributes first so we don't race with "current state"
15
- chef_node machine.node['name'] do
16
- chef_server machine_resource.chef_server
17
- raw_json machine.node
18
- end
19
- end
12
+ def chef_server
13
+ @chef_server ||= convergence_options[:chef_server] || Cheffish.default_chef_server(config)
14
+ end
15
+
16
+ def setup_convergence(action_handler, machine)
17
+ machine_spec.save(action_handler)
18
+ end
19
+
20
+ def converge(action_handler, machine)
20
21
  end
21
22
 
22
- def cleanup_convergence(action_handler, node)
23
+ def cleanup_convergence(action_handler, machine_spec)
24
+ _self = self
23
25
  ChefMetal.inline_resource(action_handler) do
24
- chef_node node['name'] do
26
+ chef_node machine_spec.name do
27
+ chef_server _self.chef_server
28
+ action :delete
29
+ end
30
+ chef_client machine_spec.name do
31
+ chef_server _self.chef_server
25
32
  action :delete
26
33
  end
27
34
  end
@@ -5,44 +5,46 @@ require 'cheffish'
5
5
  module ChefMetal
6
6
  class ConvergenceStrategy
7
7
  class PrecreateChefObjects < ConvergenceStrategy
8
- def initialize(options = {})
8
+ def initialize(convergence_options, config)
9
9
  super
10
- @client_rb_path = options[:client_rb_path]
11
- @client_pem_path = options[:client_pem_path]
12
10
  end
13
11
 
14
- attr_reader :client_rb_path
15
- attr_reader :client_pem_path
12
+ def chef_server
13
+ @chef_server ||= convergence_options[:chef_server] || Cheffish.default_chef_server(config)
14
+ end
16
15
 
17
- def setup_convergence(action_handler, machine, machine_resource)
16
+ def setup_convergence(action_handler, machine)
18
17
  # Create keys on machine
19
- public_key = create_keys(action_handler, machine, machine_resource)
18
+ public_key = create_keys(action_handler, machine)
20
19
  # Create node and client on chef server
21
- create_chef_objects(action_handler, machine, machine_resource, public_key)
20
+ create_chef_objects(action_handler, machine, public_key)
22
21
 
23
22
  # If the chef server lives on localhost, tunnel the port through to the guest
24
23
  # (we need to know what got tunneled!)
25
- chef_server_url = machine_resource.chef_server[:chef_server_url]
24
+ chef_server_url = chef_server[:chef_server_url]
26
25
  chef_server_url = machine.make_url_available_to_remote(chef_server_url)
27
26
 
28
- #Support for multiple ohai hints, required on some platforms
29
- create_ohai_files(action_handler, machine, machine_resource)
27
+ # Support for multiple ohai hints, required on some platforms
28
+ create_ohai_files(action_handler, machine)
30
29
 
31
30
  # Create client.rb and client.pem on machine
32
31
  content = client_rb_content(chef_server_url, machine.node['name'])
33
- machine.write_file(action_handler, client_rb_path, content, :ensure_dir => true)
32
+ machine.write_file(action_handler, convergence_options[:client_rb_path], content, :ensure_dir => true)
34
33
  end
35
34
 
36
- def converge(action_handler, machine, chef_server)
35
+ def converge(action_handler, machine)
37
36
  machine.make_url_available_to_remote(chef_server[:chef_server_url])
38
37
  end
39
38
 
40
- def cleanup_convergence(action_handler, node)
39
+ def cleanup_convergence(action_handler, machine_spec)
40
+ _self = self
41
41
  ChefMetal.inline_resource(action_handler) do
42
- chef_node node['name'] do
42
+ chef_node machine_spec.name do
43
+ chef_server _self.chef_server
43
44
  action :delete
44
45
  end
45
- chef_client node['name'] do
46
+ chef_client machine_spec.name do
47
+ chef_server _self.chef_server
46
48
  action :delete
47
49
  end
48
50
  end
@@ -50,8 +52,8 @@ module ChefMetal
50
52
 
51
53
  protected
52
54
 
53
- def create_keys(action_handler, machine, machine_resource)
54
- server_private_key = machine.read_file(client_pem_path)
55
+ def create_keys(action_handler, machine)
56
+ server_private_key = machine.read_file(convergence_options[:client_pem_path])
55
57
  if server_private_key
56
58
  begin
57
59
  server_private_key, format = Cheffish::KeyFormatter.decode(server_private_key)
@@ -61,25 +63,25 @@ module ChefMetal
61
63
  end
62
64
 
63
65
  if server_private_key
64
- source_key = source_key_for(machine_resource)
65
66
  if source_key && server_private_key.to_pem != source_key.to_pem
66
67
  # If the server private key does not match our source key, overwrite it
67
68
  server_private_key = source_key
68
- if machine_resource.allow_overwrite_keys
69
- machine.write_file(action_handler, client_pem_path, server_private_key.to_pem, :ensure_dir => true)
69
+ if convergence_options[:allow_overwrite_keys]
70
+ machine.write_file(action_handler, convergence_options[:client_pem_path], server_private_key.to_pem, :ensure_dir => true)
70
71
  else
71
- raise "Private key on machine #{machine_resource.name} does not match desired input key."
72
+ raise "Private key on machine #{machine.name} does not match desired input key."
72
73
  end
73
74
  end
74
75
 
75
76
  else
76
77
 
77
78
  # If the server does not already have keys, create them and upload
79
+ _convergence_options = convergence_options
78
80
  ChefMetal.inline_resource(action_handler) do
79
81
  private_key 'in_memory' do
80
82
  path :none
81
- if machine_resource.private_key_options
82
- machine_resource.private_key_options.each_pair do |key,value|
83
+ if _convergence_options[:private_key_options]
84
+ _convergence_options[:private_key_options].each_pair do |key,value|
83
85
  send(key, value)
84
86
  end
85
87
  end
@@ -87,7 +89,7 @@ module ChefMetal
87
89
  end
88
90
  end
89
91
 
90
- machine.write_file(action_handler, client_pem_path, server_private_key.to_pem, :ensure_dir => true)
92
+ machine.write_file(action_handler, convergence_options[:client_pem_path], server_private_key.to_pem, :ensure_dir => true)
91
93
  end
92
94
 
93
95
  server_private_key.public_key
@@ -97,14 +99,14 @@ module ChefMetal
97
99
  host == '127.0.0.1' || host == 'localhost' || host == '[::1]'
98
100
  end
99
101
 
100
- def source_key_for(machine_resource)
101
- if machine_resource.source_key.is_a?(String)
102
- key, format = Cheffish::KeyFormatter.decode(machine_resource.source_key, machine_resource.source_key_pass_phrase)
102
+ def source_key
103
+ if convergence_options[:source_key].is_a?(String)
104
+ key, format = Cheffish::KeyFormatter.decode(convergence_options[:source_key], convergence_options[:source_key_pass_phrase])
103
105
  key
104
- elsif machine_resource.source_key
105
- machine_resource.source_key
106
- elsif machine_resource.source_key_path
107
- key, format = Cheffish::KeyFormatter.decode(IO.read(machine_resource.source_key_path), machine_resource.source_key_pass_phrase, machine_resource.source_key_path)
106
+ elsif convergence_options[:source_key]
107
+ convergence_options[:source_key]
108
+ elsif convergence_options[:source_key_path]
109
+ key, format = Cheffish::KeyFormatter.decode(IO.read(convergence_options[:source_key_path]), convergence_options[:source_key_pass_phrase], convergence_options[:source_key_path])
108
110
  key
109
111
  else
110
112
  nil
@@ -112,9 +114,9 @@ module ChefMetal
112
114
  end
113
115
 
114
116
  # Create the ohai file(s)
115
- def create_ohai_files(action_handler, machine, machine_resource)
116
- if machine_resource.ohai_hints
117
- machine_resource.ohai_hints.each_pair do |hint, data|
117
+ def create_ohai_files(action_handler, machine)
118
+ if convergence_options[:ohai_hints]
119
+ convergence_options[:ohai_hints].each_pair do |hint, data|
118
120
  # The location of the ohai hint
119
121
  ohai_hint = "/etc/chef/ohai/hints/#{hint}.json"
120
122
  machine.write_file(action_handler, ohai_hint, data.to_json, :ensure_dir => true)
@@ -122,30 +124,32 @@ module ChefMetal
122
124
  end
123
125
  end
124
126
 
125
- def create_chef_objects(action_handler, machine, machine_resource, public_key)
127
+ def create_chef_objects(action_handler, machine, public_key)
128
+ _convergence_options = convergence_options
129
+ _chef_server = chef_server
126
130
  # Save the node and create the client keys and client.
127
131
  ChefMetal.inline_resource(action_handler) do
128
132
  # Create client
129
- chef_client machine.node['name'] do
130
- chef_server machine_resource.chef_server
133
+ chef_client machine.name do
134
+ chef_server _chef_server
131
135
  source_key public_key
132
- output_key_path machine_resource.public_key_path
133
- output_key_format machine_resource.public_key_format
134
- admin machine_resource.admin
135
- validator machine_resource.validator
136
+ output_key_path _convergence_options[:public_key_path]
137
+ output_key_format _convergence_options[:public_key_format]
138
+ admin _convergence_options[:admin]
139
+ validator _convergence_options[:validator]
136
140
  end
137
141
 
138
142
  # Create node
139
143
  # TODO strip automatic attributes first so we don't race with "current state"
140
- chef_node machine.node['name'] do
141
- chef_server machine_resource.chef_server
144
+ chef_node machine.name do
145
+ chef_server _chef_server
142
146
  raw_json machine.node
143
147
  end
144
148
  end
145
149
 
146
150
  # If using enterprise/hosted chef, fix acls
147
- if machine_resource.chef_server[:chef_server_url] =~ /\/+organizations\/.+/
148
- grant_client_node_permissions(machine_resource.chef_server, machine.node['name'], ["read", "update"])
151
+ if chef_server[:chef_server_url] =~ /\/+organizations\/.+/
152
+ grant_client_node_permissions(chef_server, machine.name, ["read", "update"])
149
153
  end
150
154
  end
151
155
 
@@ -164,7 +168,7 @@ module ChefMetal
164
168
  <<EOM
165
169
  chef_server_url #{chef_server_url.inspect}
166
170
  node_name #{node_name.inspect}
167
- client_key #{client_pem_path.inspect}
171
+ client_key #{convergence_options[:client_pem_path].inspect}
168
172
  EOM
169
173
  end
170
174
  end