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 +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
|