ecs_deployer 1.0.11 → 1.0.12

Sign up to get free protection for your applications and to get access to all the features.
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