Class: Capistrano::ASG::Rolling::Plugin

Inherits:
Plugin
  • Object
show all
Defined in:
lib/capistrano/asg/rolling/plugin.rb

Overview

Load this Capistrano Plugin in your Capfile:

require 'capistrano/asg/rolling' install_plugin Capistrano::ASG::Rolling::Plugin

Instance Method Summary collapse

Instance Method Details

#add_instance(instance, properties) ⇒ Object

Add an instance to the Capistrano server list, with the given properties.



54
55
56
57
58
59
60
# File 'lib/capistrano/asg/rolling/plugin.rb', line 54

def add_instance(instance, properties)
  server_properties = properties.merge(instance_id: instance.id)

  logger.verbose "Adding server: **#{instance.ip_address}**"

  server(instance.ip_address, server_properties)
end

#cleanupObject

Make sure any instances that were launched for rolling updates are terminated.



63
64
65
66
67
68
69
70
71
# File 'lib/capistrano/asg/rolling/plugin.rb', line 63

def cleanup
  instances = config.instances.auto_terminatable
  return if instances.empty?

  logger.info 'Terminating instance(s)...'
  instances.terminate
rescue Capistrano::ASG::Rolling::InstanceTerminateFailed => e
  logger.warning "Failed to terminate Instance **#{e.instance.id}**: #{e.message}"
end

#configObject



49
50
51
# File 'lib/capistrano/asg/rolling/plugin.rb', line 49

def config
  Capistrano::ASG::Rolling::Configuration
end

#define_tasksObject



41
42
43
# File 'lib/capistrano/asg/rolling/plugin.rb', line 41

def define_tasks
  eval_rakefile File.expand_path('../tasks/rolling.rake', __dir__)
end

#loggerObject



45
46
47
# File 'lib/capistrano/asg/rolling/plugin.rb', line 45

def logger
  @logger ||= Logger.new(timestamp: config.log_timestamp?, verbose: config.log_verbose?)
end

#register_hooksObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/capistrano/asg/rolling/plugin.rb', line 22

def register_hooks
  Capistrano::DSL.stages.each do |stage|
    after stage, 'rolling:setup'
  end

  after 'deploy', 'rolling:update'
  after 'deploy:failed', 'rolling:cleanup'

  after 'rolling:update', 'rolling:cleanup'
  after 'rolling:create_ami', 'rolling:cleanup'

  after 'rolling:update', 'rolling:instance_refresh_status'
  after 'rolling:trigger_instance_refresh', 'rolling:instance_refresh_status'

  # Register an exit hook to do some cleanup when Capistrano
  # terminates without calling our after cleanup hook.
  at_exit { cleanup }
end

#set_defaultsObject



14
15
16
17
18
19
20
# File 'lib/capistrano/asg/rolling/plugin.rb', line 14

def set_defaults
  set_if_empty :asg_rolling_group_name, ENV.fetch('asg_name', nil)
  set_if_empty :asg_rolling_use_private_ip_address, true
  set_if_empty :asg_rolling_log_verbose, true
  set_if_empty :asg_rolling_log_timestamp, false
  set_if_empty :asg_rolling_update, true
end