Class: OpsTasks::Scale

Inherits:
Deployment show all
Defined in:
lib/ops_tasks/scale.rb

Instance Method Summary collapse

Methods inherited from Deployment

#announce_log, #announce_status, #configure, #deploy, #instance_ids, #log_url, #notifications_disabled?, #setup, #update_cookbooks

Constructor Details

#initialize(args) ⇒ Scale

Returns a new instance of Scale.



3
4
5
6
# File 'lib/ops_tasks/scale.rb', line 3

def initialize(args)
  @instance_type = args[:instance_type]
  super
end

Instance Method Details

#assess_status(instance_id) ⇒ Object



22
23
24
25
26
# File 'lib/ops_tasks/scale.rb', line 22

def assess_status(instance_id)
  @client.describe_instances(
    :instance_ids => [instance_id]
  )[:instances].first[:status]
end

#create_instance(auto_scale = false) ⇒ Object



8
9
10
11
12
13
14
# File 'lib/ops_tasks/scale.rb', line 8

def create_instance(auto_scale = false)
  args = { :stack_id => @stack_id,
           :layer_ids => [@layer_id],
           :instance_type => @instance_type }
  args[:auto_scale] = 'load' if auto_scale
  @client.create_instance(args)[:instance_id]
end

#deployment_failed?(instance_id) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
31
32
# File 'lib/ops_tasks/scale.rb', line 28

def deployment_failed?(instance_id)
  @client.describe_instances(
    :instance_ids => [instance_id]
  )[:instances].first[:status] == 'failed'
end

#poll_api_for_status(deployment_id) ⇒ Object



34
35
36
37
38
# File 'lib/ops_tasks/scale.rb', line 34

def poll_api_for_status(deployment_id)
  ok_statuses = ['online', 'setup_failed']
  sleep 1 until ok_statuses.include?(assess_status(deployment_id))
  puts assess_status(deployment_id)
end

#start_instance(instance_id) ⇒ Object



16
17
18
19
20
# File 'lib/ops_tasks/scale.rb', line 16

def start_instance(instance_id)
  @client.start_instance(
    :instance_id => instance_id
  )
end

#wait_for_completion(instance_id, task = "create instance") ⇒ Object



40
41
42
43
44
45
46
47
# File 'lib/ops_tasks/scale.rb', line 40

def wait_for_completion(instance_id, task="create instance")
  print "#{@project}: Running... "
  announce_status(task, instance_id)
  poll_api_for_status(instance_id)
  announce_status(task, instance_id)
  announce_log(instance_id) if deployment_failed?(instance_id)
  Process.daemon if @run_in_background
end