knife-hmc 1.0.0

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.
@@ -0,0 +1,67 @@
1
+ #
2
+ # Authors: Christopher M Wood (<woodc@us.ibm.com>)
3
+ # John F Hutchinson (<jfhutchi@us.ibm.com>)
4
+ # © Copyright IBM Corporation 2015.
5
+ #
6
+ # LICENSE: MIT (http://opensource.org/licenses/MIT)
7
+ #
8
+
9
+ require 'chef/knife/hmc_base'
10
+
11
+ class Chef
12
+ class Knife
13
+ class HmcDiskRemove < Knife
14
+
15
+ include Knife::HmcBase
16
+
17
+ banner "knife hmc disk remove (options)"
18
+
19
+ option :frame_name,
20
+ :short => "-f NAME",
21
+ :long => "--frame NAME",
22
+ :description => "Name of the Host in which the LPAR resides."
23
+
24
+ option :lpar_name,
25
+ :short => "-l NAME",
26
+ :long => "--lpar",
27
+ :description => "Name of LPAR you wish to delete."
28
+
29
+ option :vio1_name,
30
+ :short => "-p NAME",
31
+ :long => "--primary_vio NAME",
32
+ :description => "Name of the primary vio."
33
+
34
+ option :vio2_name,
35
+ :short => "-s NAME",
36
+ :long => "--secondary_vio NAME",
37
+ :description => "Name of the secondary vio."
38
+
39
+ option :pvid,
40
+ :short => "-i PVID",
41
+ :long => "--pvid PVID",
42
+ :description => "Physical Volume Identification Number."
43
+
44
+ def run
45
+ Chef::Log.debug("Removing disk...")
46
+
47
+ validate!([:frame_name,:lpar_name,:vio2_name,:vio1_name,:pvid])
48
+ #Create HMC Object and connect to the HMC
49
+ hmc = Hmc.new(get_config(:hmc_host), get_config(:hmc_username) , {:password => get_config(:hmc_password)})
50
+ hmc.connect
51
+ #Populate hash to make LPAR object
52
+ lpar_hash = hmc.get_lpar_options(get_config(:frame_name),get_config(:lpar_name))
53
+ #Create LPAR object based on hash, and VIO objects
54
+ lpar = Lpar.new(lpar_hash)
55
+ vio1 = Vio.new(hmc, get_config(:frame_name), get_config(:vio1_name))
56
+ vio2 = Vio.new(hmc, get_config(:frame_name), get_config(:vio2_name))
57
+ #Remove disk by pvid
58
+ vio1.unmap_by_pvid(vio2,get_config(:pvid))
59
+ puts "Successfully removed LUN with PVID #{get_config(:pvid)}"
60
+ #Disconnect from HMC
61
+ hmc.disconnect
62
+
63
+ end
64
+
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,54 @@
1
+ #
2
+ # Authors: Christopher M Wood (<woodc@us.ibm.com>)
3
+ # John F Hutchinson (<jfhutchi@us.ibm.com>)
4
+ # © Copyright IBM Corporation 2015.
5
+ #
6
+ # LICENSE: MIT (http://opensource.org/licenses/MIT)
7
+ #
8
+
9
+ require 'chef/knife/hmc_base'
10
+
11
+ class Chef
12
+ class Knife
13
+ class HmcImageList < Knife
14
+
15
+ include Knife::HmcBase
16
+
17
+ banner "knife hmc image list --nim_host HOSTNAME --nim_user USER --nim_pass PASSWORD"
18
+
19
+ option :nim_host,
20
+ :short => "-n HOST",
21
+ :long => "--nim_host HOST",
22
+ :description => "The fully qualified domain name of the NIM server"
23
+
24
+ option :nim_user,
25
+ :short => "-l USER",
26
+ :long => "--nim_user USER",
27
+ :description => "The username for the NIM server"
28
+
29
+
30
+ option :nim_pass,
31
+ :short => "-m PASSWORD",
32
+ :long => "--nim_pass PASSWORD",
33
+ :description => "The password of the user specified in --nim_user"
34
+
35
+
36
+ def run
37
+ Chef::Log.debug("Listing images...")
38
+
39
+ validate!([:nim_host,:nim_user,:nim_pass])
40
+
41
+ nim = Nim.new(get_config(:nim_host),get_config(:nim_user),{:password => get_config(:nim_pass)})
42
+ nim.connect
43
+
44
+ puts "Mksysb Image Names: "
45
+ nim.list_images.each do |image_name|
46
+ puts "#{image_name}"
47
+ end
48
+
49
+ nim.disconnect
50
+ end
51
+
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,111 @@
1
+ #
2
+ # Authors: Christopher M Wood (<woodc@us.ibm.com>)
3
+ # John F Hutchinson (<jfhutchi@us.ibm.com>)
4
+ # © Copyright IBM Corporation 2015.
5
+ #
6
+ # LICENSE: MIT (http://opensource.org/licenses/MIT)
7
+ #
8
+
9
+ require 'chef/knife/hmc_base'
10
+
11
+ class Chef
12
+ class Knife
13
+ class HmcServerConfig < Knife
14
+
15
+ include Knife::HmcBase
16
+
17
+ banner "knife hmc server config -f FRAME -l LPARNAME -a A=V[,A=V,A=V...]"
18
+
19
+ option :lpar,
20
+ :short => "-l LPARNAME",
21
+ :long => "--lpar LPARNAME",
22
+ :description => "The name of the LPAR to configure"
23
+
24
+ option :frame,
25
+ :short => "-f FRAME",
26
+ :long => "--frame FRAME",
27
+ :description => "The name of the frame on which the LPAR resides"
28
+
29
+ option :attributes,
30
+ :short => "-a A=V[,A=V,...]",
31
+ :long => "--attributes Attr=Value[,Attr=Value,...]",
32
+ :description => "A list of LPAR attributes and what their values should be changed to",
33
+ :proc => Proc.new { |attributes| attributes.split(',') }
34
+
35
+ def run
36
+ Chef::Log.debug("Configuring server...")
37
+
38
+ validate!
39
+ validate!([:lpar,:frame, :attributes])
40
+ hmc = Hmc.new(get_config(:hmc_host), get_config(:hmc_username) , {:password => get_config(:hmc_password)})
41
+ hmc.connect
42
+
43
+ options_hash = hmc.get_lpar_options(get_config(:frame),get_config(:lpar))
44
+ lpar = Lpar.new(options_hash)
45
+
46
+ puts "Configuring #{lpar.name}..."
47
+
48
+ attrs = get_config(:attributes)
49
+ attrs.each do |operation|
50
+ key,value = operation.split('=')
51
+ case key
52
+ when "name"
53
+ old_name = lpar.name
54
+ lpar.rename(value)
55
+ puts "Changed name from #{old_name} to #{lpar.name}"
56
+ when "max_virtual_slots"
57
+ old_max = lpar.max_virtual_slots
58
+ lpar.max_virtual_slots = value.to_i
59
+ puts "Changed max_virtual_slots from #{old_max} to #{lpar.max_virtual_slots}"
60
+ when "uncap_weight"
61
+ old_weight = lpar.uncap_weight
62
+ unless (lpar.uncap_weight = value.to_i).nil?
63
+ puts "Changed uncap_weight from #{old_weight} to #{lpar.uncap_weight}"
64
+ end
65
+ when "desired_proc_units"
66
+ old_units = lpar.desired_proc_units
67
+ lpar.desired_proc_units = value.to_f
68
+ puts "Changed desired_proc_units from #{old_units} to #{lpar.desired_proc_units}"
69
+ when "max_proc_units"
70
+ old_units = lpar.max_proc_units
71
+ lpar.max_proc_units = value.to_f
72
+ puts "Changed max_proc_units from #{old_units} to #{lpar.max_proc_units}"
73
+ when "min_proc_units"
74
+ old_units = lpar.min_proc_units
75
+ lpar.min_proc_units = value.to_f
76
+ puts "Changed min_proc_units from #{old_units} to #{lpar.min_proc_units}"
77
+ when "desired_vcpu"
78
+ old_units = lpar.desired_vcpu
79
+ lpar.desired_vcpu = value.to_i
80
+ puts "Changed desired_vcpu from #{old_units} to #{lpar.desired_vcpu}"
81
+ when "max_vcpu"
82
+ old_units = lpar.max_vcpu
83
+ lpar.max_vcpu = value.to_i
84
+ puts "Changed max_vcpu from #{old_units} to #{lpar.max_vcpu}"
85
+ when "min_vcpu"
86
+ old_units = lpar.min_vcpu
87
+ lpar.min_vcpu = value.to_i
88
+ puts "Changed min_vcpu from #{old_units} to #{lpar.min_vcpu}"
89
+ when "desired_memory"
90
+ old_units = lpar.desired_memory
91
+ lpar.desired_memory = value.to_i
92
+ puts "Changed desired_memory from #{old_units} to #{lpar.desired_memory}"
93
+ when "max_memory"
94
+ old_units = lpar.max_memory
95
+ lpar.max_memory = value.to_i
96
+ puts "Changed max_memory from #{old_units} to #{lpar.max_memory}"
97
+ when "min_memory"
98
+ old_units = lpar.min_memory
99
+ lpar.min_memory = value.to_i
100
+ puts "Changed min_memory from #{old_units} to #{lpar.min_memory}"
101
+ else
102
+ puts "Unrecognized attribute #{key}, proceeding to next config change..."
103
+ end
104
+ end
105
+
106
+ hmc.disconnect
107
+ end
108
+
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,368 @@
1
+ #
2
+ # Authors: Christopher M Wood (<woodc@us.ibm.com>)
3
+ # John F Hutchinson (<jfhutchi@us.ibm.com>)
4
+ # © Copyright IBM Corporation 2015.
5
+ #
6
+ # LICENSE: MIT (http://opensource.org/licenses/MIT)
7
+ #
8
+
9
+ require 'chef/knife/hmc_base'
10
+
11
+
12
+ class Chef
13
+ class Knife
14
+ class HmcServerCreate < Knife
15
+
16
+ include Knife::HmcBase
17
+
18
+ deps do
19
+ require 'net/scp'
20
+ require 'chef/knife/bootstrap'
21
+ Chef::Knife::Bootstrap.load_deps
22
+ end
23
+
24
+ banner "knife hmc server create (options)"
25
+
26
+ option :nim_host,
27
+ :short => "-n HOST",
28
+ :long => "--nim_host HOST",
29
+ :description => "The fully qualified domain name of the NIM server"
30
+
31
+ option :nim_username,
32
+ :short => "-k USER",
33
+ :long => "--nim_user USER",
34
+ :description => "The username for the NIM server"
35
+
36
+ option :nim_password,
37
+ :short => "-m PASSWORD",
38
+ :long => "--nim_pass PASSWORD",
39
+ :description => "The password of the user specified in --nim_user"
40
+
41
+ option :image,
42
+ :short => "-I IMAGE",
43
+ :long => "--image image",
44
+ :description => "The name of the mksysb image on the NIM."
45
+
46
+ option :fb_script,
47
+ :short => "-d NAME",
48
+ :long => "--fb_script NAME",
49
+ :description => "Name of the first boot script to use."
50
+
51
+ option :ip_address,
52
+ :short => "-i IPADDRESS",
53
+ :long => "--ip_address IPADDRESS",
54
+ :description => "The IP address to use on the LPAR."
55
+
56
+ option :vlan_id,
57
+ :short => "-N VLANID",
58
+ :long => "--vlan_id VLANID",
59
+ :description => "The VLAN ID number the NIC on the LPAR should use. --ip_address should reside in this VLAN."
60
+
61
+ option :frame_name,
62
+ :short => "-f NAME",
63
+ :long => "--frame NAME",
64
+ :description => "Name of the Host in which the LPAR resides."
65
+
66
+ option :lpar_name,
67
+ :short => "-l NAME",
68
+ :long => "--lpar",
69
+ :description => "Name of LPAR you wish to delete."
70
+
71
+ option :vio1_name,
72
+ :short => "-p NAME",
73
+ :long => "--primary_vio NAME",
74
+ :description => "Name of the primary vio."
75
+
76
+ option :vio2_name,
77
+ :short => "-s NAME",
78
+ :long => "--secondary_vio NAME",
79
+ :description => "Name of the secondary vio."
80
+
81
+ option :min_proc,
82
+ :short => "-a PROCVAL",
83
+ :long => "--min_proc PROCVAL",
84
+ :description => "Minimum Processor Units to use on LPAR."
85
+
86
+ option :des_proc,
87
+ :short => "-b PROCVAL",
88
+ :long => "--des_proc PROCVAL",
89
+ :description => "Desired Processor Units to use on LPAR."
90
+
91
+ option :max_proc,
92
+ :short => "-c PROCVAL",
93
+ :long => "--max_proc PROCVAL",
94
+ :description => "Maximum Processor Units to use on LPAR."
95
+
96
+ option :min_vcpu,
97
+ :short => "-A PROCVAL",
98
+ :long => "--min_vcpu PROCVAL",
99
+ :description => "Minimum virtual CPU to use on LPAR."
100
+
101
+ option :des_vcpu,
102
+ :short => "-B PROCVAL",
103
+ :long => "--des_vcpu PROCVAL",
104
+ :description => "Desired virtual CPU to use on LPAR."
105
+
106
+ option :max_vcpu,
107
+ :short => "-C PROCVAL",
108
+ :long => "--max_vcpu PROCVAL",
109
+ :description => "Maximum virtual CPU to use on LPAR."
110
+
111
+ option :min_mem,
112
+ :short => "-D PROCVAL",
113
+ :long => "--min_mem PROCVAL",
114
+ :description => "Minimum memory to use on LPAR."
115
+
116
+ option :des_mem,
117
+ :short => "-E PROCVAL",
118
+ :long => "--des_mem PROCVAL",
119
+ :description => "Desired memory to use on LPAR."
120
+
121
+ option :max_mem,
122
+ :short => "-F PROCVAL",
123
+ :long => "--max_mem PROCVAL",
124
+ :description => "Maximum memory to use on LPAR."
125
+
126
+ option :size,
127
+ :short => "-S SIZEINGB",
128
+ :long => "--size SIZEINGB",
129
+ :description => "Size in GB of the LUN to use for the rootvg."
130
+
131
+ option :register_node,
132
+ :short => "-r CHEF_SERVER_URL",
133
+ :long => "--register_node CHEF_SERVER_URL",
134
+ :description => "Bootstraps this server as a Chef node and registers it with the specified Chef server"
135
+
136
+ option :bootstrap_user,
137
+ :short => "-u BOOTSTRAP_USER",
138
+ :long => "--bootstrap_user BOOTSTRAP_USER",
139
+ :description => "User to bootstrap the Chef Node as (if not specified, assumed to be 'root'). Completely ignored if --register_node isn't used"
140
+
141
+ option :bootstrap_pass,
142
+ :short => "-w BOOTSTRAP_PASS",
143
+ :long => "--bootstrap_pass BOOTSTRAP_PASS",
144
+ :description => "Password to use on the client LPAR when bootstrapping it. Ignored if --register_node is not specified"
145
+
146
+
147
+ def run
148
+ Chef::Log.debug("Creating server...")
149
+
150
+ validate!([:frame_name,:lpar_name,:vio1_name,:vio2_name,:des_mem,:des_vcpu,:des_proc])
151
+ #Create Objects
152
+ hmc = Hmc.new(get_config(:hmc_host), get_config(:hmc_username), {:password => get_config(:hmc_password)})
153
+ vio1 = Vio.new(hmc, get_config(:frame_name), get_config(:vio1_name))
154
+ vio2 = Vio.new(hmc, get_config(:frame_name), get_config(:vio2_name))
155
+
156
+ #Option checking for LPAR and NIM objects
157
+ #Since we only technically need desired proc,vcpu, mem to make an lpar we
158
+ #need to check for the optional flags. And Deploying the OS is optional we
159
+ #also need to check for those.
160
+ if validate([:min_mem,:max_mem,:min_vcpu,:max_vcpu,:min_proc,:max_proc])
161
+ lpar = Lpar.new({:hmc => hmc,:min_proc => get_config(:min_proc),:des_proc => get_config(:des_proc), :max_proc => get_config(:max_proc), :min_mem => get_config(:min_mem), :des_mem => get_config(:des_mem), :max_mem => get_config(:max_mem), :min_vcpu => get_config(:min_vcpu), :des_vcpu => get_config(:des_vcpu), :max_vcpu => get_config(:max_vcpu), :frame => get_config(:frame_name), :name => get_config(:lpar_name)})
162
+ else
163
+ lpar = Lpar.new({:hmc => hmc,:des_proc => get_config(:des_proc),:des_mem => get_config(:des_mem),:des_vcpu => get_config(:des_vcpu), :frame => get_config(:frame_name), :name => get_config(:lpar_name)})
164
+ end
165
+
166
+ image_deploy = false
167
+ first_bootscript = nil
168
+ if validate([:nim_host,:nim_username,:nim_password,:image,:ip_address,:size,:vlan_id])
169
+ image_deploy = true
170
+ nim = Nim.new(get_config(:nim_host),get_config(:nim_username), {:password => get_config(:nim_password)})
171
+ end
172
+
173
+ if image_deploy == true
174
+ if validate([:fb_script])
175
+ first_bootscript = get_config(:fb_script)
176
+ end
177
+ end
178
+
179
+ #Open connections
180
+ hmc.connect
181
+ puts "Connected to #{get_config(:hmc_host)} as #{get_config(:hmc_username)}."
182
+ if image_deploy == true
183
+ nim.connect
184
+ puts "Connected to #{get_config(:nim_host)} as #{get_config(:nim_username)}."
185
+ end
186
+
187
+ #Create LPAR
188
+ lpar.create
189
+ puts "LPAR created."
190
+
191
+ if image_deploy == true
192
+ #Add vSCSI adapters
193
+ lpar.add_vscsi(vio1)
194
+ lpar.add_vscsi(vio2)
195
+ puts "vSCSI Adapters added to #{get_config(:lpar_name)}."
196
+
197
+ #Get vSCSI information
198
+ lpar_vscsi = lpar.get_vscsi_adapters
199
+
200
+ #Find the vHosts
201
+ #TO-DO: Need to update the logic here. 1st element doesn't necessarily
202
+ #have to map to the 1st VIO's vSCSI.
203
+ first_vhost = vio1.find_vhost_given_virtual_slot(lpar_vscsi[0].remote_slot_num)
204
+ second_vhost = vio2.find_vhost_given_virtual_slot(lpar_vscsi[1].remote_slot_num)
205
+
206
+ #Attach a Disk
207
+ vio1.map_single_disk_by_size(first_vhost,vio2,second_vhost,get_config(:size).to_i)
208
+ puts "LUN attached to #{get_config(:lpar_name)}."
209
+
210
+ #Attach vNIC, will activate and deactive LPAR to assign MAC address to NIC
211
+ lpar.create_vnic(get_config(:vlan_id))
212
+ puts "vNIC attached to #{get_config(:lpar_name)}."
213
+
214
+ ##Deploy Mksysb, booting LPAR
215
+ nim.deploy_image(lpar,get_config(:image),first_bootscript) do |nimIp,gw,snm|
216
+ hmc.lpar_net_boot(nimIp,get_config(:ip_address),gw,snm,lpar)
217
+ end
218
+ puts "#{get_config(:image)} deployed to #{get_config(:lpar_name)}."
219
+ end
220
+
221
+ if image_deploy == true
222
+ nim.disconnect
223
+ puts "Disconnected from #{get_config(:nim_host)}."
224
+
225
+ #Check to see if the :register_node option has been specified
226
+ #since we can only connect to bootstrap this server if it has
227
+ #a working OS on it.
228
+ if validate([:register_node])
229
+ #Branch here in case we can use Chef::Knife::Bootstrap
230
+ #to handle this sometime in the future. For now, hardcode the
231
+ #manual bootstrap
232
+ manual_bootstrap = true
233
+
234
+ #Wait here until the client is alive
235
+ print "Bootstrapping client. Waiting for sshd..."
236
+ print "." until tcp_ssh_alive(get_config(:ip_address))
237
+ puts "done\nInitiating bootstrap."
238
+
239
+ if manual_bootstrap
240
+ manual_bootstrap_for_node
241
+ else
242
+ bootstrap_for_node
243
+ end
244
+ end
245
+ end
246
+
247
+ #Close connection
248
+ hmc.disconnect
249
+ puts "Disconnected from #{get_config(:hmc_host)}."
250
+
251
+ puts "Successfully created #{get_config(:lpar_name)}."
252
+ end
253
+
254
+ #Manually execute the Chef bootstrap of an AIX server
255
+ def manual_bootstrap_for_node
256
+ validate!([:bootstrap_pass])
257
+
258
+ #Where the validation pem and chef-client exist on
259
+ #the chef workstation this is run from
260
+ validation_pem_path = Chef::Config[:validation_key]
261
+ puts "Using client key #{validation_pem_path}"
262
+ chef_client_path = Chef::Config[:knife][:chef_client_aix_path]
263
+ puts "Using chef-client located in #{chef_client_path}"
264
+
265
+ if validation_pem_path.nil? or chef_client_path.nil?
266
+ puts "No client validation pem or chef-client installable specified in knife.rb. Skipping Chef Bootstrap..."
267
+ return nil
268
+ end
269
+
270
+ #Where to place these files on the target server
271
+ remote_chef_client_path = "/tmp/2014-02-06-chef.11.10.0.0.bff"
272
+ remote_validation_pem_path = "/etc/chef/validation.pem"
273
+
274
+ #For some reason, Net::SSH and Net::SCP only work on
275
+ #AIX using :kex => "diffie-hellman-group1-sha1" and
276
+ # :encryption => ["blowfish-cbc", "3des-cbc"]
277
+ # :paranoid => false (avoids host key verification)
278
+ Net::SSH.start(get_config(:ip_address),
279
+ get_config(:bootstrap_user) || "root",
280
+ :password => get_config(:bootstrap_pass),
281
+ :kex => "diffie-hellman-group1-sha1",
282
+ :encryption => ["blowfish-cbc", "3des-cbc"],
283
+ :paranoid => false) do |ssh|
284
+
285
+ #Copy the chef-client .bff file to the client machine in /tmp
286
+ puts "Copying chef client binary to client"
287
+ ssh.scp.upload!(chef_client_path, remote_chef_client_path)
288
+
289
+ #Run the install command
290
+ puts "Running chef client install"
291
+ output = ssh.exec!("installp -aYFq -d #{remote_chef_client_path} chef")
292
+ Chef::Log.debug("Chef Client install output:\n#{output}")
293
+
294
+ #Run the configure client command
295
+ puts "Running knife configure client command"
296
+ output = ssh.exec!("knife configure client -s #{get_config(:register_node)} /etc/chef")
297
+ Chef::Log.debug("Knife Configure output:\n#{output}")
298
+
299
+ #Copy the validation key to /etc/chef on the client
300
+ puts "Uploading validation.pem to client"
301
+ ssh.scp.upload!(validation_pem_path, remote_validation_pem_path)
302
+
303
+ #Edit /etc/chef/client.rb so that it points at the location of the validator
304
+ puts "Adding validator key path to client.rb"
305
+ cmd = %Q{echo "validator_key '#{remote_validation_pem_path}'" >> /etc/chef/client.rb}
306
+ output = ssh.exec!(cmd)
307
+ Chef::Log.debug("#{output}")
308
+
309
+ #Register the client node with the Chef server, by running chef-client
310
+ #Add additional handling of this command to determine if the chef-client
311
+ #run finished successfully or not.
312
+ puts "Running chef-client to register as a Chef node"
313
+ output = ""
314
+ stderr_out = ""
315
+ exit_code = nil
316
+ ssh.exec("chef-client") do |ch, success|
317
+ unless success
318
+ abort "FAILED: chef-client command failed to execute on client"
319
+ end
320
+ ch.on_data do |ch,data|
321
+ output+=data
322
+ end
323
+ ch.on_extended_data do |ch,type,data|
324
+ stderr_out+=data
325
+ end
326
+ ch.on_request("exit-status") do |ch,data|
327
+ exit_code = data.read_long
328
+ end
329
+ end
330
+ ssh.loop
331
+ if exit_code != 0
332
+ puts "Initial chef-client run failed. Please verify client settings and rerun chef-client to register this server as a node with #{get_config(:register_node)}"
333
+ return nil
334
+ end
335
+ Chef::Log.debug("chef-client command output:\n#{output}")
336
+ end
337
+ end
338
+
339
+ #Bootstrapping a Chef node using all Chef faculties
340
+ #TO-DO: fix up the body of this once normal bootstrap
341
+ #works on AIX nodes.
342
+ def bootstrap_for_node
343
+ bootstrap = Chef::Knife::Bootstrap.new
344
+ bootstrap.name_args = [config[:fqdn]]
345
+ bootstrap.config[:run_list] = get_config(:run_list).split(/[\s,]+/)
346
+ bootstrap.config[:secret_file] = get_config(:secret_file)
347
+ bootstrap.config[:hint] = get_config(:hint)
348
+ bootstrap.config[:ssh_user] = get_config(:ssh_user)
349
+ bootstrap.config[:ssh_password] = get_config(:ssh_password)
350
+ bootstrap.config[:ssh_port] = get_config(:ssh_port)
351
+ bootstrap.config[:identity_file] = get_config(:identity_file)
352
+ bootstrap.config[:chef_node_name] = get_config(:chef_node_name)
353
+ bootstrap.config[:prerelease] = get_config(:prerelease)
354
+ bootstrap.config[:bootstrap_version] = get_config(:bootstrap_version)
355
+ bootstrap.config[:distro] = get_config(:distro)
356
+ bootstrap.config[:use_sudo] = true unless get_config(:ssh_user) == 'root'
357
+ bootstrap.config[:template_file] = get_config(:template_file)
358
+ bootstrap.config[:environment] = get_config(:environment)
359
+ bootstrap.config[:first_boot_attributes] = get_config(:first_boot_attributes)
360
+ bootstrap.config[:log_level] = get_config(:log_level)
361
+ # may be needed for vpc_mode
362
+ bootstrap.config[:no_host_key_verify] = get_config(:no_host_key_verify)
363
+ bootstrap
364
+ end
365
+
366
+ end
367
+ end
368
+ end