Module: EcsDeploy::ServiceDeployment
- Defined in:
- lib/ecs_deploy/service_deployment.rb
Defined Under Namespace
Classes: HookNotFoundError
Constant Summary collapse
- IN_FLIGHT_STATUSES =
%w[IN_PROGRESS PENDING].freeze
- DESCRIBE_STATUSES =
%w[IN_PROGRESS PENDING STOPPED].freeze
Class Method Summary collapse
- .describe(services:, regions:, default_cluster:) ⇒ Object
- .each_target(services:, regions:, default_cluster:) ⇒ Object
- .invoke_lifecycle_hook(hook_id:, action:, services:, regions:, default_cluster:) ⇒ Object
- .list_deployments(client, cluster, service_name, statuses:) ⇒ Object
- .log_deployment(d) ⇒ Object
- .stop(service_deployment_arn:, region:, stop_type: nil) ⇒ Object
Class Method Details
.describe(services:, regions:, default_cluster:) ⇒ Object
10 11 12 13 14 15 16 |
# File 'lib/ecs_deploy/service_deployment.rb', line 10 def describe(services:, regions:, default_cluster:) each_target(services: services, regions: regions, default_cluster: default_cluster) do |client, cluster, svc| deployments = list_deployments(client, cluster, svc[:name], statuses: DESCRIBE_STATUSES) next if deployments.empty? deployments.each { |d| log_deployment(d) } end end |
.each_target(services:, regions:, default_cluster:) ⇒ Object
44 45 46 47 48 49 50 51 52 |
# File 'lib/ecs_deploy/service_deployment.rb', line 44 def each_target(services:, regions:, default_cluster:) services.each do |svc| cluster = svc[:cluster] || default_cluster regions.each do |r| client = Aws::ECS::Client.new(EcsDeploy.config.ecs_client_params.merge(region: r)) yield client, cluster, svc end end end |
.invoke_lifecycle_hook(hook_id:, action:, services:, regions:, default_cluster:) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/ecs_deploy/service_deployment.rb', line 18 def invoke_lifecycle_hook(hook_id:, action:, services:, regions:, default_cluster:) found = false each_target(services: services, regions: regions, default_cluster: default_cluster) do |client, cluster, svc| deployments = list_deployments(client, cluster, svc[:name], statuses: IN_FLIGHT_STATUSES) deployments.each do |d| next unless Array(d.lifecycle_hook_details).any? { |h| h.hook_id == hook_id } client.continue_service_deployment( service_deployment_arn: d.service_deployment_arn, hook_id: hook_id, action: action, ) EcsDeploy.logger.info "#{action.downcase}d lifecycle_hook=#{hook_id} service_deployment_arn=#{d.service_deployment_arn}" found = true end end raise HookNotFoundError, "Lifecycle hook #{hook_id} not found in any in-progress service deployment" unless found end |
.list_deployments(client, cluster, service_name, statuses:) ⇒ Object
54 55 56 57 58 59 60 61 62 |
# File 'lib/ecs_deploy/service_deployment.rb', line 54 def list_deployments(client, cluster, service_name, statuses:) arns = client.list_service_deployments( cluster: cluster, service: service_name, status: statuses, ).service_deployments.map(&:service_deployment_arn) return [] if arns.empty? client.describe_service_deployments(service_deployment_arns: arns).service_deployments end |
.log_deployment(d) ⇒ Object
64 65 66 67 68 69 |
# File 'lib/ecs_deploy/service_deployment.rb', line 64 def log_deployment(d) EcsDeploy.logger.info "service_deployment_arn=#{d.service_deployment_arn} status=#{d.status} lifecycle_stage=#{d.lifecycle_stage}" Array(d.lifecycle_hook_details).each do |hook| EcsDeploy.logger.info " hook_id=#{hook.hook_id} target=#{hook.target_type} status=#{hook.status} expires_at=#{hook.expires_at} timeout_action=#{hook.timeout_action}" end end |
.stop(service_deployment_arn:, region:, stop_type: nil) ⇒ Object
36 37 38 39 40 41 42 |
# File 'lib/ecs_deploy/service_deployment.rb', line 36 def stop(service_deployment_arn:, region:, stop_type: nil) client = Aws::ECS::Client.new(EcsDeploy.config.ecs_client_params.merge(region: region)) params = { service_deployment_arn: service_deployment_arn } params[:stop_type] = stop_type if stop_type client.stop_service_deployment(params) EcsDeploy.logger.info "stopped service_deployment_arn=#{service_deployment_arn}#{stop_type ? " stop_type=#{stop_type}" : ""}" end |