ecs_deployer 1.0.12 → 2.0.0

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: 1c2e073c32d7935742a6d87dcf5b04afd2503fee
4
- data.tar.gz: 2e983699cf073f336fe1965d8e2e7ee1b464f5f4
3
+ metadata.gz: 7c04f404f3247f1b7908c78f61d4a5139dd7a765
4
+ data.tar.gz: cc5867745048b07123f8f556e21c5ebd2f06e394
5
5
  SHA512:
6
- metadata.gz: '02872736a0060a1b4fc78fb6a628f536a25e68b8031fc1e936f2da9569d3f999bb66cc5720c2bc248e6026bcb52a3804940fed22419476271c93d79de5e35117'
7
- data.tar.gz: 8018bd2bd361c359ff257259529386adfbe41a14705fff23e299b2be7ba3160b63badff81c41d8a393d99aa3f1b1e43619a8816934e70869742a094f256d0e40
6
+ metadata.gz: 37a8a063edc9c3639a5fe6b8979628c676b44fe8954809da4557441a329fe256ba44e8734dd51cf4e0fc2661612e984ea99e8f2a047273b5c2463c2c80248eeb
7
+ data.tar.gz: 8f28ca6748a8a2783af87032ed03194dbe264374f23a37cf77bbf5abef461da15fd11127e81c7cf45144a487573fa7d51351d51528572473324b1681bde05a46
data/example/sample.rb CHANGED
@@ -3,6 +3,6 @@ require 'ecs_deployer'
3
3
 
4
4
  path = File.expand_path('../spec/fixtures/task.yml', File.dirname(File.realpath(__FILE__)))
5
5
 
6
- deployer = EcsDeployer::Client.new
7
- deployer.register_task(path, tag: 'latest')
8
- # deployer.update_service('sandbox', 'production')
6
+ deployer = EcsDeployer::Client.new('sandbox')
7
+ task_definition = deployer.register_task(path, tag: 'latest')
8
+ deployer.update_service('production', task_definition)
data/lib/ecs_deployer.rb CHANGED
@@ -7,7 +7,6 @@ module EcsDeployer
7
7
  class ServiceNotFoundError < EcsDeployer::Error; end
8
8
  class TaskRunningError < EcsDeployer::Error; end
9
9
  class TaskDefinitionValidateError < EcsDeployer::Error; end
10
- class TaskDesiredError < EcsDeployer::Error; end
11
10
  class TaskStoppedError < EcsDeployer::Error; end
12
11
  class KmsEncryptError < EcsDeployer::Error; end
13
12
  class KmsDecryptError < EcsDeployer::Error; end
@@ -10,15 +10,17 @@ module EcsDeployer
10
10
  ENCRYPT_PATTERN = /^\${(.+)}$/
11
11
 
12
12
  attr_reader :ecs
13
- attr_accessor :timeout, :pauling_interval
13
+ attr_accessor :wait_timeout, :pauling_interval
14
14
 
15
+ # @param [String] cluster
15
16
  # @param [Logger] logger
16
17
  # @return [EcsDeployer::Client]
17
- def initialize(logger = nil, aws_options = {})
18
+ def initialize(cluster, logger = nil, aws_options = {})
19
+ @cluster = cluster
18
20
  @logger = logger.nil? ? Logger.new(STDOUT) : logger
19
21
  @ecs = Aws::ECS::Client.new(aws_options)
20
22
  @kms = Aws::KMS::Client.new(aws_options)
21
- @timeout = 900
23
+ @wait_timeout = 900
22
24
  @pauling_interval = 20
23
25
  end
24
26
 
@@ -56,7 +58,7 @@ module EcsDeployer
56
58
 
57
59
  # @param [Hash] task_definition
58
60
  # @param [Hash] replace_variables
59
- # @return [String]
61
+ # @return [Aws::ECS::Types::TaskDefinition]
60
62
  def register_task_hash(task_definition, replace_variables = {})
61
63
  task_definition = Oj.load(Oj.dump(task_definition), symbol_keys: true)
62
64
 
@@ -70,19 +72,14 @@ module EcsDeployer
70
72
  volumes: task_definition[:volumes]
71
73
  )
72
74
 
73
- @family = result[:task_definition][:family]
74
- @revision = result[:task_definition][:revision]
75
- @new_task_definition_arn = result[:task_definition][:task_definition_arn]
75
+ result[:task_definition]
76
76
  end
77
77
 
78
- # @param [String] cluster
79
78
  # @param [String] service
80
79
  # @return [String]
81
- def register_clone_task(cluster, service)
82
- detected_service = false
83
-
80
+ def register_clone_task(service)
84
81
  result = @ecs.describe_services(
85
- cluster: cluster,
82
+ cluster: @cluster,
86
83
  services: [service]
87
84
  )
88
85
 
@@ -92,28 +89,25 @@ module EcsDeployer
92
89
  result = @ecs.describe_task_definition(
93
90
  task_definition: svc[:task_definition]
94
91
  )
95
- @new_task_definition_arn = register_task_hash(result[:task_definition].to_hash)
96
- detected_service = true
97
- break
98
- end
99
92
 
100
- raise ServiceNotFoundError, "'#{service}' service is not found." unless detected_service
93
+ return register_task_hash(result[:task_definition].to_hash)
94
+ end
101
95
 
102
- @new_task_definition_arn
96
+ raise ServiceNotFoundError, "'#{service}' service is not found."
103
97
  end
104
98
 
105
- # @param [String] cluster
106
99
  # @param [String] service
100
+ # @param [Aws::ECS::Types::TaskDefinition] task_definition
107
101
  # @return [String]
108
- def update_service(cluster, service, wait = true)
109
- register_clone_task(cluster, service) if @new_task_definition_arn.nil?
102
+ def update_service(service, task_definition = nil, wait = true)
103
+ task_definition = register_clone_task(service) if task_definition.nil?
110
104
  result = @ecs.update_service(
111
- cluster: cluster,
105
+ cluster: @cluster,
112
106
  service: service,
113
- task_definition: @family + ':' + @revision.to_s
107
+ task_definition: task_definition[:family] + ':' + task_definition[:revision].to_s
114
108
  )
115
109
 
116
- wait_for_deploy(cluster, service, result.service.task_definition) if wait
110
+ wait_for_deploy(service, result.service.task_definition) if wait
117
111
  result.service.service_arn
118
112
  end
119
113
 
@@ -151,13 +145,12 @@ module EcsDeployer
151
145
  end
152
146
  end
153
147
 
154
- # @param [String] cluster
155
148
  # @param [String] service
156
149
  # @return [Aws::ECS::Types::Service]
157
- def service_status(cluster, service)
150
+ def service_status(service)
158
151
  status = nil
159
152
  result = @ecs.describe_services(
160
- cluster: cluster,
153
+ cluster: @cluster,
161
154
  services: [service]
162
155
  )
163
156
  result[:services].each do |svc|
@@ -171,12 +164,11 @@ module EcsDeployer
171
164
  status
172
165
  end
173
166
 
174
- # @param [String] cluster
175
167
  # @param [String] service
176
168
  # @param [String] task_definition_arn
177
- def detect_stopped_task(cluster, service, task_definition_arn)
169
+ def detect_stopped_task(service, task_definition_arn)
178
170
  stopped_tasks = @ecs.list_tasks(
179
- cluster: cluster,
171
+ cluster: @cluster,
180
172
  service_name: service,
181
173
  desired_status: 'STOPPED'
182
174
  ).task_arns
@@ -184,7 +176,7 @@ module EcsDeployer
184
176
  return if stopped_tasks.size.zero?
185
177
 
186
178
  description_tasks = @ecs.describe_tasks(
187
- cluster: cluster,
179
+ cluster: @cluster,
188
180
  tasks: stopped_tasks
189
181
  ).tasks
190
182
 
@@ -193,16 +185,15 @@ module EcsDeployer
193
185
  end
194
186
  end
195
187
 
196
- # @param [String] cluster
197
188
  # @param [String] service
198
189
  # @param [String] task_definition_arn
199
190
  # @return [Hash]
200
- def deploy_status(cluster, service, task_definition_arn)
201
- detect_stopped_task(cluster, service, task_definition_arn)
191
+ def deploy_status(service, task_definition_arn)
192
+ detect_stopped_task(service, task_definition_arn)
202
193
 
203
194
  # Get current tasks
204
195
  result = @ecs.list_tasks(
205
- cluster: cluster,
196
+ cluster: @cluster,
206
197
  service_name: service,
207
198
  desired_status: 'RUNNING'
208
199
  )
@@ -210,7 +201,7 @@ module EcsDeployer
210
201
  raise TaskRunningError, 'Running task not found.' if result[:task_arns].size.zero?
211
202
 
212
203
  result = @ecs.describe_tasks(
213
- cluster: cluster,
204
+ cluster: @cluster,
214
205
  tasks: result[:task_arns]
215
206
  )
216
207
 
@@ -218,7 +209,7 @@ module EcsDeployer
218
209
  task_status_logs = []
219
210
 
220
211
  result[:tasks].each do |task|
221
- new_running_count += 1 if @new_task_definition_arn == task[:task_definition_arn] && task[:last_status] == 'RUNNING'
212
+ new_running_count += 1 if task_definition_arn == task[:task_definition_arn] && task[:last_status] == 'RUNNING'
222
213
  task_status_logs << " #{task[:task_definition_arn]} [#{task[:last_status]}]"
223
214
  end
224
215
 
@@ -229,12 +220,10 @@ module EcsDeployer
229
220
  }
230
221
  end
231
222
 
232
- # @param [String] cluster
233
223
  # @param [String] service
234
224
  # @param [String] task_definition_arn
235
- def wait_for_deploy(cluster, service, task_definition_arn)
236
- service_status = service_status(cluster, service)
237
- raise TaskDesiredError, 'Task desired by service is 0.' if service_status[:desired_count].zero?
225
+ def wait_for_deploy(service, task_definition_arn)
226
+ service_status = service_status(service)
238
227
 
239
228
  wait_time = 0
240
229
  @logger.info 'Start deploying...'
@@ -242,10 +231,10 @@ module EcsDeployer
242
231
  loop do
243
232
  sleep(@pauling_interval)
244
233
  wait_time += @pauling_interval
245
- result = deploy_status(cluster, service, task_definition_arn)
234
+ result = deploy_status(service, task_definition_arn)
246
235
 
247
236
  @logger.info "Deploying... [#{result[:new_running_count]}/#{result[:current_running_count]}] (#{wait_time} seconds elapsed)"
248
- @logger.info "New task: #{@new_task_definition_arn}"
237
+ @logger.info "New task: #{task_definition_arn}"
249
238
  @logger.info LOG_SEPARATOR
250
239
 
251
240
  result[:task_status_logs].each do |log|
@@ -256,14 +245,14 @@ module EcsDeployer
256
245
 
257
246
  if result[:new_running_count] == result[:current_running_count]
258
247
  @logger.info "Service update succeeded. [#{result[:new_running_count]}/#{result[:current_running_count]}]"
259
- @logger.info "New task definition: #{@new_task_definition_arn}"
248
+ @logger.info "New task definition: #{task_definition_arn}"
260
249
 
261
250
  break
262
251
  else
263
252
  @logger.info 'You can stop process with Ctrl+C. Deployment will continue.'
264
253
 
265
- if wait_time > @timeout
266
- @logger.info "New task definition: #{@new_task_definition_arn}"
254
+ if wait_time > @wait_timeout
255
+ @logger.info "New task definition: #{task_definition_arn}"
267
256
  raise DeployTimeoutError, 'Service is being updating, but process is timed out.'
268
257
  end
269
258
  end
@@ -1,3 +1,3 @@
1
1
  module EcsDeployer
2
- VERSION = '1.0.12'.freeze
2
+ VERSION = '2.0.0'.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.12
4
+ version: 2.0.0
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-18 00:00:00.000000000 Z
11
+ date: 2017-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj