ecs_deployer 1.0.12 → 2.0.0

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