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 +4 -4
- data/lib/ecs_deployer.rb +1 -0
- data/lib/ecs_deployer/client.rb +41 -15
- data/lib/ecs_deployer/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1c2e073c32d7935742a6d87dcf5b04afd2503fee
|
4
|
+
data.tar.gz: 2e983699cf073f336fe1965d8e2e7ee1b464f5f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '02872736a0060a1b4fc78fb6a628f536a25e68b8031fc1e936f2da9569d3f999bb66cc5720c2bc248e6026bcb52a3804940fed22419476271c93d79de5e35117'
|
7
|
+
data.tar.gz: 8018bd2bd361c359ff257259529386adfbe41a14705fff23e299b2be7ba3160b63badff81c41d8a393d99aa3f1b1e43619a8816934e70869742a094f256d0e40
|
data/lib/ecs_deployer.rb
CHANGED
@@ -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
|
data/lib/ecs_deployer/client.rb
CHANGED
@@ -9,16 +9,16 @@ module EcsDeployer
|
|
9
9
|
LOG_SEPARATOR = '-' * 96
|
10
10
|
ENCRYPT_PATTERN = /^\${(.+)}$/
|
11
11
|
|
12
|
-
attr_reader :
|
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
|
-
@
|
19
|
+
@ecs = Aws::ECS::Client.new(aws_options)
|
20
20
|
@kms = Aws::KMS::Client.new(aws_options)
|
21
|
-
@timeout =
|
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 = @
|
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 = @
|
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 = @
|
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
|
-
|
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 = @
|
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 = @
|
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 = @
|
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
|
-
|
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}"
|
data/lib/ecs_deployer/version.rb
CHANGED
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.
|
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-
|
11
|
+
date: 2017-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oj
|