class Hyrb::Tasks::Provision::DigitalOcean

Public Instance Methods

run(env) click to toggle source
# File lib/hyrb/tasks/provision.rb, line 17
def run(env)
  ssh_key_ids = env.project.developers(env.developers).map(&:digital_ocean_id).compact

  flavor_id = option_list(env.digital_ocean_cache, :flavors, 2) do |f, i|
    "#{i+1}: #{f.name} ram / #{f.cpu} cpu / #{'$%.2f/mo' % f.cost_per_month}"
  end.id

  image_id = option_list(env.digital_ocean_cache, :images, 16) do |f, i|
    "#{i+1}: #{f.name} / id: #{f.id}"
  end.id

  region_id = option_list(env.digital_ocean_cache, :regions, 2) do |f, i|
    "#{i+1}: #{f.name} / id: #{f.id}"
  end.id

  say "Creating Digital Ocean Server"
  server = env.digital_ocean_client.servers.create({
    name: env.environment.server_name,
    flavor_id: flavor_id,
    image_id: image_id,
    region_id: region_id,
    ssh_key_ids: ssh_key_ids,
  })

  env.environment.provider = 'digital_ocean'
  env.environment.server_id = server.id

  sleep(4) until server.reload.ready?
  env.environment.host = server.public_ip_address

  env.environment.save!

  say "Created Digital Ocean Server!", :green
  say "IP Address: #{server.public_ip_address} / ID: #{server.id}", :green
  say "\n\tssh root@#{server.public_ip_address}\n"
  beep
end