Class: OpsTasks::Deployment
- Inherits:
-
Object
- Object
- OpsTasks::Deployment
- Defined in:
- lib/ops_tasks/deployment.rb
Direct Known Subclasses
Instance Method Summary collapse
- #announce_log(id) ⇒ Object
-
#announce_status(task, deployment_id) ⇒ Object
def status(deployment_id) @client.describe_deployments(:deployment_ids => [deployment_id]).first end.
- #assess_status(deployment_id) ⇒ Object
- #configure ⇒ Object
- #deploy ⇒ Object
- #deployment_failed?(id) ⇒ Boolean
-
#initialize(args) ⇒ Deployment
constructor
A new instance of Deployment.
- #instance_ids ⇒ Object
- #log_url(deployment_id) ⇒ Object
- #notifications_disabled? ⇒ Boolean
- #poll_api_for_status(deployment_id, running_status = 'running') ⇒ Object
- #setup ⇒ Object
- #update_cookbooks ⇒ Object
- #wait_for_completion(deployment_id, task = "deployment") ⇒ Object
Constructor Details
#initialize(args) ⇒ Deployment
Returns a new instance of Deployment.
7 8 9 10 11 12 13 14 15 |
# File 'lib/ops_tasks/deployment.rb', line 7 def initialize(args) @client = AWS::OpsWorks::Client.new @layer_id = args[:layer_id] @recipe = args[:recipe] @stack_id = args[:stack_id] @slack_channel = args[:room] @project = args[:project] @run_in_background = args[:background] end |
Instance Method Details
#announce_log(id) ⇒ Object
107 108 109 110 111 112 113 |
# File 'lib/ops_tasks/deployment.rb', line 107 def announce_log(id) return "" if log_url(id).empty? "Chef". says("log: #{URI.encode(log_url(id))}"). to_channel(@slack_channel) # puts log_url(id) end |
#announce_status(task, deployment_id) ⇒ Object
def status(deployment_id)
@client.describe_deployments(:deployment_ids => [deployment_id])[:deployments].first[:status]
end
91 92 93 94 95 |
# File 'lib/ops_tasks/deployment.rb', line 91 def announce_status(task, deployment_id) return false if notifications_disabled? status = assess_status(deployment_id) "Chef".says("#{@project} #{task} <#{log_url(deployment_id)}|#{status}>").to_channel(@slack_channel) end |
#assess_status(deployment_id) ⇒ Object
97 98 99 100 101 |
# File 'lib/ops_tasks/deployment.rb', line 97 def assess_status(deployment_id) @client.describe_deployments( :deployment_ids => [deployment_id] )[:deployments].first[:status] end |
#configure ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/ops_tasks/deployment.rb', line 50 def configure print "#{@project}: Preparing configuration... " id = @client.create_deployment( :stack_id => @stack_id, :instance_ids => instance_ids, :command => { name: "configure" } )[:deployment_id] puts "successful" return id end |
#deploy ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/ops_tasks/deployment.rb', line 23 def deploy print "#{@project}: Preparing deployment... " id = @client.create_deployment( :stack_id => @stack_id, :instance_ids => instance_ids, :command => { name: "execute_recipes", args: {"recipes" => [@recipe]} } )[:deployment_id] puts "successful" return id end |
#deployment_failed?(id) ⇒ Boolean
103 104 105 |
# File 'lib/ops_tasks/deployment.rb', line 103 def deployment_failed?(id) assess_status(id) == 'failed' end |
#instance_ids ⇒ Object
17 18 19 20 21 |
# File 'lib/ops_tasks/deployment.rb', line 17 def instance_ids client = AWS::OpsWorks::Client.new instance_objects = client.describe_instances(:layer_id => @layer_id) return instance_objects.instances.map{|i| i.instance_id}.to_a end |
#log_url(deployment_id) ⇒ Object
75 76 77 78 79 80 |
# File 'lib/ops_tasks/deployment.rb', line 75 def log_url(deployment_id) deploy = @client.describe_commands( :deployment_id => deployment_id )[:commands].first ShortURL.shorten(deploy[:log_url]).to_s rescue "https://console.aws.com" end |
#notifications_disabled? ⇒ Boolean
83 84 85 |
# File 'lib/ops_tasks/deployment.rb', line 83 def notifications_disabled? ENV["#{@project}_room_notifications"] == 'false' end |
#poll_api_for_status(deployment_id, running_status = 'running') ⇒ Object
115 116 117 118 119 120 |
# File 'lib/ops_tasks/deployment.rb', line 115 def poll_api_for_status(deployment_id, running_status = 'running') sleep 1 until assess_status(deployment_id) != running_status astatus = assess_status(deployment_id) puts "#{astatus}" `open #{log_url(deployment_id)}` if astatus == 'failed' end |
#setup ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/ops_tasks/deployment.rb', line 37 def setup print "#{@project}: Preparing setup... " id = @client.create_deployment( :stack_id => @stack_id, :instance_ids => instance_ids, :command => { name: "setup" } )[:deployment_id] puts "successful" return id end |
#update_cookbooks ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/ops_tasks/deployment.rb', line 63 def update_cookbooks print "#{@project}: Preparing cookbook update... " id = @client.create_deployment( :stack_id => @stack_id, :instance_ids => instance_ids, :command => {name: 'update_custom_cookbooks'} )[:deployment_id] puts "successful" return id end |
#wait_for_completion(deployment_id, task = "deployment") ⇒ Object
122 123 124 125 126 127 128 |
# File 'lib/ops_tasks/deployment.rb', line 122 def wait_for_completion(deployment_id, task="deployment") print "#{@project}: Running... " announce_status(task, deployment_id) poll_api_for_status(deployment_id) announce_status(task, deployment_id) # Process.daemon if @run_in_background end |