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.



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

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.



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

def cleanup
  instances = config.instances.auto_terminate
  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



47
48
49
# File 'lib/capistrano/asg/rolling/plugin.rb', line 47

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

#define_tasksObject



39
40
41
# File 'lib/capistrano/asg/rolling/plugin.rb', line 39

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

#loggerObject



43
44
45
# File 'lib/capistrano/asg/rolling/plugin.rb', line 43

def logger
  @logger ||= Logger.new(verbose: config.verbose?)
end

#register_hooksObject



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

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
# 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_verbose, true
  set_if_empty :asg_rolling_update, true
end