class Chef::Knife::CloudstackPublicipCreate

Public Instance Methods

run() click to toggle source
# File lib/chef/knife/cloudstack_publicip_create.rb, line 38
def run
  $stdout.sync = true

  validate!

  options = {}

  if locate_config_value(:networkid) != nil
    options['networkid']=locate_config_value(:networkid)
  end

  if locate_config_value(:zoneid) != nil
    options['zoneid']=locate_config_value(:zoneid)

    publicip_list = [
      ui.color('ID', :bold),
      ui.color('ipaddress', :bold),
      ui.color('isSourceNAT', :bold),
      ui.color('isStaticNAT', :bold)
    ]

    response = connection.acquire_ip_address(options)
    publicipid = response['associateipaddressresponse']['id']
    jobid = response['associateipaddressresponse'].fetch('jobid')

    publicip_assign = connection.query_async_job_result('jobid'=>jobid)
    print "#{ui.color("Waiting for assigning Public IP", :magenta)}"
    while publicip_assign['queryasyncjobresultresponse'].fetch('jobstatus') != 1
      print "#{ui.color(".", :magenta)}"
      sleep(5)
      publicip_assign = connection.query_async_job_result('jobid'=>jobid)
    end
    puts "\n\n"

    publicip_assign = connection.query_async_job_result('jobid'=>jobid)
    publicip = publicip_assign['queryasyncjobresultresponse']['jobresult']['ipaddress']

    publicip_list << publicip['id'].to_s
    publicip_list << publicip['ipaddress'].to_s
    publicip_list << publicip['issourcenat'].to_s
    publicip_list << publicip['isstaticnat'].to_s

    puts ui.list(publicip_list, :columns_across, 4)

  else
    puts 'Error. Missing Zone ID (-z).'
  end

end