class OpsDeploy
Constants
- VERSION
Attributes
deployments_callback[RW]
instances_check_callback[RW]
waiter[RW]
Public Class Methods
new(config = nil)
click to toggle source
# File lib/ops_deploy.rb, line 14 def initialize(config = nil) config ||= { region: 'us-east-1' } @opsworks = Aws::OpsWorks::Client.new(config) end
Public Instance Methods
check_instances(stack_id_name_or_object)
click to toggle source
# File lib/ops_deploy.rb, line 68 def check_instances(stack_id_name_or_object) stack = find_stack(stack_id_name_or_object) running_instances = @opsworks.describe_instances(stack_id: stack.stack_id).instances.select do |instance| instance.status == 'online' end waiters = [] running_instances.each do |instance| waiters << OpsDeploy::InstanceResponseWaiter.new(@opsworks, instance, @instances_check_callback) end @waiter = Thread.new(waiters) do |check_threads| check_threads.each(&:run) check_threads.each(&:join) end @waiter.run end
find_app(stack, application_id_name_or_object)
click to toggle source
# File lib/ops_deploy.rb, line 118 def find_app(stack, application_id_name_or_object) found_app = nil if application_id_name_or_object.is_a?(String) begin if application_id_name_or_object.match(/^[0-9a-f\-]+$/) found_app = @opsworks.describe_apps(app_ids: [application_id_name_or_object]).apps.first end rescue Aws::OpsWorks::Errors::ResourceNotFoundException found_app = nil end if found_app.nil? @opsworks.describe_apps(stack_id: stack.stack_id).apps.each do |app| if app.name == application_id_name_or_object found_app = app break end end end elsif application_id_name_or_object.nil? apps = @opsworks.describe_apps(stack_id: stack.stack_id).apps found_app = apps.first if apps.count == 1 end found_app = application_id_name_or_object if found_app.nil? error_message = "Invalid app #{found_app} (#{application_id_name_or_object})." invalid_app_error = StandardError.new(error_message) fail invalid_app_error unless found_app.is_a?(Aws::OpsWorks::Types::App) found_app end
find_stack(stack_id_name_or_object)
click to toggle source
# File lib/ops_deploy.rb, line 88 def find_stack(stack_id_name_or_object) found_stack = nil if stack_id_name_or_object.is_a?(String) begin if stack_id_name_or_object.match(/^[0-9a-f\-]+$/) found_stack = @opsworks.describe_stacks(stack_ids: [stack_id_name_or_object]).stacks.first end rescue Aws::OpsWorks::Errors::ResourceNotFoundException found_stack = nil end if found_stack.nil? @opsworks.describe_stacks.stacks.each do |stack| if stack.name == stack_id_name_or_object found_stack = stack break end end end end found_stack = stack_id_name_or_object if found_stack.nil? error_message = "Invalid stack #{found_stack} (#{stack_id_name_or_object})." invalid_stack_error = StandardError.new(error_message) fail invalid_stack_error unless found_stack.is_a?(Aws::OpsWorks::Types::Stack) found_stack end
stacks()
click to toggle source
# File lib/ops_deploy.rb, line 22 def stacks @opsworks.describe_stacks.stacks end
start_deployment(stack_id_name_or_object, application_id_name_or_object = nil, migrate = false)
click to toggle source
# File lib/ops_deploy.rb, line 26 def start_deployment(stack_id_name_or_object, application_id_name_or_object = nil, migrate = false) stack = find_stack(stack_id_name_or_object) app = find_app(stack, application_id_name_or_object) command = { name: 'deploy' } command['args'] = { migrate: ['true'] } if migrate resp = @opsworks.create_deployment(stack_id: stack.stack_id, app_id: app.app_id, command: command) (resp && resp.deployment_id) end
wait_for_deployments(stack_id_name_or_object)
click to toggle source
# File lib/ops_deploy.rb, line 42 def wait_for_deployments(stack_id_name_or_object) stack = find_stack(stack_id_name_or_object) running_deployments = @opsworks.describe_deployments(stack_id: stack.stack_id) .deployments.select do |deployment| deployment.status == 'running' end if running_deployments.empty? false else waiters = [] running_deployments.each do |deployment| waiters << OpsDeploy::DeploymentWaiter.new(@opsworks, deployment, @deployments_callback) end @waiter = Thread.new(waiters) do |deploy_threads| deploy_threads.each(&:run) deploy_threads.each(&:join) end @waiter.run end end