ecs_deployer 1.0.11 → 1.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d8b9bc5a8735c4eb1d79342c151373c12f4cebd9
4
- data.tar.gz: c5c20860e6c7529810199f6eed0b862828f8fecb
3
+ metadata.gz: 1c2e073c32d7935742a6d87dcf5b04afd2503fee
4
+ data.tar.gz: 2e983699cf073f336fe1965d8e2e7ee1b464f5f4
5
5
  SHA512:
6
- metadata.gz: 6bc40dd8e90ab7229ea6288da8afe181634a9c08ee5b73fef4239ecb7c00c39e863f74e63fd8ee959d05e617c5000d796ba245ca493ddfdd1ccbf547ca4937ae
7
- data.tar.gz: 736a31ecbfe3abe35fc9f998f32971f3de152e360466a4346dd5375f252d8a1ba90ed22b6b21a3f3bd9e60378d25ea3db8275e10a8f143a0bf39537de0365f66
6
+ metadata.gz: '02872736a0060a1b4fc78fb6a628f536a25e68b8031fc1e936f2da9569d3f999bb66cc5720c2bc248e6026bcb52a3804940fed22419476271c93d79de5e35117'
7
+ data.tar.gz: 8018bd2bd361c359ff257259529386adfbe41a14705fff23e299b2be7ba3160b63badff81c41d8a393d99aa3f1b1e43619a8816934e70869742a094f256d0e40
@@ -8,6 +8,7 @@ module EcsDeployer
8
8
  class TaskRunningError < EcsDeployer::Error; end
9
9
  class TaskDefinitionValidateError < EcsDeployer::Error; end
10
10
  class TaskDesiredError < EcsDeployer::Error; end
11
+ class TaskStoppedError < EcsDeployer::Error; end
11
12
  class KmsEncryptError < EcsDeployer::Error; end
12
13
  class KmsDecryptError < EcsDeployer::Error; end
13
14
  class DeployTimeoutError < EcsDeployer::Error; end
@@ -9,16 +9,16 @@ module EcsDeployer
9
9
  LOG_SEPARATOR = '-' * 96
10
10
  ENCRYPT_PATTERN = /^\${(.+)}$/
11
11
 
12
- attr_reader :cli
12
+ attr_reader :ecs
13
13
  attr_accessor :timeout, :pauling_interval
14
14
 
15
15
  # @param [Logger] logger
16
16
  # @return [EcsDeployer::Client]
17
17
  def initialize(logger = nil, aws_options = {})
18
18
  @logger = logger.nil? ? Logger.new(STDOUT) : logger
19
- @cli = Aws::ECS::Client.new(aws_options)
19
+ @ecs = Aws::ECS::Client.new(aws_options)
20
20
  @kms = Aws::KMS::Client.new(aws_options)
21
- @timeout = 600
21
+ @timeout = 900
22
22
  @pauling_interval = 20
23
23
  end
24
24
 
@@ -63,7 +63,7 @@ module EcsDeployer
63
63
  replace_parameter_variables!(task_definition, replace_variables)
64
64
  decrypt_environment_variables!(task_definition)
65
65
 
66
- result = @cli.register_task_definition(
66
+ result = @ecs.register_task_definition(
67
67
  container_definitions: task_definition[:container_definitions],
68
68
  family: task_definition[:family],
69
69
  task_role_arn: task_definition[:task_role_arn],
@@ -81,7 +81,7 @@ module EcsDeployer
81
81
  def register_clone_task(cluster, service)
82
82
  detected_service = false
83
83
 
84
- result = @cli.describe_services(
84
+ result = @ecs.describe_services(
85
85
  cluster: cluster,
86
86
  services: [service]
87
87
  )
@@ -89,7 +89,7 @@ module EcsDeployer
89
89
  result[:services].each do |svc|
90
90
  next unless svc[:service_name] == service
91
91
 
92
- result = @cli.describe_task_definition(
92
+ result = @ecs.describe_task_definition(
93
93
  task_definition: svc[:task_definition]
94
94
  )
95
95
  @new_task_definition_arn = register_task_hash(result[:task_definition].to_hash)
@@ -107,13 +107,13 @@ module EcsDeployer
107
107
  # @return [String]
108
108
  def update_service(cluster, service, wait = true)
109
109
  register_clone_task(cluster, service) if @new_task_definition_arn.nil?
110
-
111
- result = @cli.update_service(
110
+ result = @ecs.update_service(
112
111
  cluster: cluster,
113
112
  service: service,
114
113
  task_definition: @family + ':' + @revision.to_s
115
114
  )
116
- wait_for_deploy(cluster, service) if wait
115
+
116
+ wait_for_deploy(cluster, service, result.service.task_definition) if wait
117
117
  result.service.service_arn
118
118
  end
119
119
 
@@ -156,7 +156,7 @@ module EcsDeployer
156
156
  # @return [Aws::ECS::Types::Service]
157
157
  def service_status(cluster, service)
158
158
  status = nil
159
- result = @cli.describe_services(
159
+ result = @ecs.describe_services(
160
160
  cluster: cluster,
161
161
  services: [service]
162
162
  )
@@ -173,10 +173,35 @@ module EcsDeployer
173
173
 
174
174
  # @param [String] cluster
175
175
  # @param [String] service
176
+ # @param [String] task_definition_arn
177
+ def detect_stopped_task(cluster, service, task_definition_arn)
178
+ stopped_tasks = @ecs.list_tasks(
179
+ cluster: cluster,
180
+ service_name: service,
181
+ desired_status: 'STOPPED'
182
+ ).task_arns
183
+
184
+ return if stopped_tasks.size.zero?
185
+
186
+ description_tasks = @ecs.describe_tasks(
187
+ cluster: cluster,
188
+ tasks: stopped_tasks
189
+ ).tasks
190
+
191
+ description_tasks.each do |task|
192
+ raise TaskStoppedError, task.stopped_reason if task.task_definition_arn == task_definition_arn
193
+ end
194
+ end
195
+
196
+ # @param [String] cluster
197
+ # @param [String] service
198
+ # @param [String] task_definition_arn
176
199
  # @return [Hash]
177
- def deploy_status(cluster, service)
200
+ def deploy_status(cluster, service, task_definition_arn)
201
+ detect_stopped_task(cluster, service, task_definition_arn)
202
+
178
203
  # Get current tasks
179
- result = @cli.list_tasks(
204
+ result = @ecs.list_tasks(
180
205
  cluster: cluster,
181
206
  service_name: service,
182
207
  desired_status: 'RUNNING'
@@ -184,7 +209,7 @@ module EcsDeployer
184
209
 
185
210
  raise TaskRunningError, 'Running task not found.' if result[:task_arns].size.zero?
186
211
 
187
- result = @cli.describe_tasks(
212
+ result = @ecs.describe_tasks(
188
213
  cluster: cluster,
189
214
  tasks: result[:task_arns]
190
215
  )
@@ -206,7 +231,8 @@ module EcsDeployer
206
231
 
207
232
  # @param [String] cluster
208
233
  # @param [String] service
209
- def wait_for_deploy(cluster, service)
234
+ # @param [String] task_definition_arn
235
+ def wait_for_deploy(cluster, service, task_definition_arn)
210
236
  service_status = service_status(cluster, service)
211
237
  raise TaskDesiredError, 'Task desired by service is 0.' if service_status[:desired_count].zero?
212
238
 
@@ -216,7 +242,7 @@ module EcsDeployer
216
242
  loop do
217
243
  sleep(@pauling_interval)
218
244
  wait_time += @pauling_interval
219
- result = deploy_status(cluster, service)
245
+ result = deploy_status(cluster, service, task_definition_arn)
220
246
 
221
247
  @logger.info "Deploying... [#{result[:new_running_count]}/#{result[:current_running_count]}] (#{wait_time} seconds elapsed)"
222
248
  @logger.info "New task: #{@new_task_definition_arn}"
@@ -1,3 +1,3 @@
1
1
  module EcsDeployer
2
- VERSION = '1.0.11'.freeze
2
+ VERSION = '1.0.12'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecs_deployer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.11
4
+ version: 1.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - naomichi-y
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-15 00:00:00.000000000 Z
11
+ date: 2017-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj