class Chef::Knife::ProfitbricksServerCreate

Public Instance Methods

run() click to toggle source
# File lib/chef/knife/profitbricks_server_create.rb, line 51
def run
  $stdout.sync = true
  validate_required_params(%i(datacenter_id name cores ram), Chef::Config[:knife])

  print "#{ui.color('Creating server...', :magenta)}"
  params = {
    name: Chef::Config[:knife][:name],
    cores: Chef::Config[:knife][:cores],
    cpuFamily: Chef::Config[:knife][:cpufamily],
    ram: Chef::Config[:knife][:ram],
    availabilityZone: Chef::Config[:knife][:availabilityzone]
  }

  if Chef::Config[:knife][:bootcdrom]
    params[:bootCdrom] = { id: Chef::Config[:knife][:bootcdrom] }
  end

  if Chef::Config[:knife][:bootvolume]
    params[:bootVolume] = { id: Chef::Config[:knife][:bootvolume] }
  end

  connection
  server = ProfitBricks::Server.create(
    Chef::Config[:knife][:datacenter_id],
    params.compact
  )

  dot = ui.color('.', :magenta)
  server.wait_for { print dot; ready? }
  server.reload

  puts "\n"
  puts "#{ui.color('ID', :cyan)}: #{server.id}"
  puts "#{ui.color('Name', :cyan)}: #{server.properties['name']}"
  puts "#{ui.color('Cores', :cyan)}: #{server.properties['cores']}"
  puts "#{ui.color('CPU Family', :cyan)}: #{server.properties['cpuFamily']}"
  puts "#{ui.color('Ram', :cyan)}: #{server.properties['ram']}"
  puts "#{ui.color('Availability Zone', :cyan)}: #{server.properties['availabilityZone']}"
  puts "#{ui.color('Boot Volume', :cyan)}: #{server.properties['bootVolume']}"
  puts "#{ui.color('Boot CDROM', :cyan)}: #{server.properties['bootCdrom']}"

  puts 'done'
end