class Chef::Knife::CloudstackServerStart
Public Instance Methods
run()
click to toggle source
# File lib/chef/knife/cloudstack_server_start.rb, line 28 def run if @name_args.nil? || @name_args.empty? puts "#{ui.color("Please provide an Instance ID.", :red)}" end jobs = {} batch_size = 5 @name_args.each_slice(batch_size) do |batch| batch.each do |instance_id| response = connection.list_virtual_machines('name' => instance_id) instance_name = response['listvirtualmachinesresponse']['virtualmachine'].first['name'] instance_ip = response['listvirtualmachinesresponse']['virtualmachine'].first['nic'].first['ipaddress'] real_instance_id = response['listvirtualmachinesresponse']['virtualmachine'].first['id'] puts "#{ui.color("Name", :green)}: #{instance_name}" puts "#{ui.color("Public IP", :green)}: #{instance_ip}" puts "\n" confirm("#{ui.color("Do you really want to start this server", :green)}") if locate_config_value(:force) server = connection.start_virtual_machine('id' => real_instance_id, 'forced' => true) else server = connection.start_virtual_machine('id' => real_instance_id) end jobid = server['startvirtualmachineresponse'].fetch('jobid') jobs[instance_id] = jobid end print "#{ui.color("Waiting for servers", :magenta)}" until jobs.empty? jobs.each do |instance_id, jobid| server_start = connection.query_async_job_result('jobid'=>jobid) if server_start['queryasyncjobresultresponse'].fetch('jobstatus') == 1 jobs.delete(instance_id) puts "\n\n" ui.warn("Started server #{instance_id}") else print "#{ui.color(".", :magenta)}" sleep(1) end end end end end