hako 0.15.3 → 0.16.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: 6541f521311e717989be14fa03aa01cfaebdccc4
4
- data.tar.gz: e41e27d8e2c03fa455572219e4c8145557ba7d78
3
+ metadata.gz: 7c78bf9739661a4f8020dadce5cd49efd68092f0
4
+ data.tar.gz: 731b2f7faec9a00225048cbbcfa3c3223326d15b
5
5
  SHA512:
6
- metadata.gz: 655551f7212f9cbcc4f3bcc588e77a10010cd9e799355fc6c0ecdf0bf1313622b7cb809e6c130d667a5ccb61537f06d32b997ac0b7febe44ad6ec149803201a7
7
- data.tar.gz: df72b0768cbb2b2dd88aa85d9e830d393fd5aa9bad6168e5beedadf2c00beeadc7fd5184016534a3d0b40f13be7d260269da0218eaf57596a508c946fa036b7e
6
+ metadata.gz: e7725a47c69273f2604a0039ec74a0a5d4d4a2c785642287689b6cec0ba58dc9ab790d1c659372de27fd1e34f18a878486b1abd5adb37e70ba4ec954683f893e
7
+ data.tar.gz: 511a77047f7c97c91114ab1dfad3b90828c1cdaf991c3476cf92eafc344197767b4109873b34ef8913e0e43c6c92e54d2657fcf85db4f978fa5af3ded2563a05
data/examples/hello.yml CHANGED
@@ -3,6 +3,7 @@ scheduler:
3
3
  region: ap-northeast-1
4
4
  cluster: eagletmt
5
5
  desired_count: 2
6
+ task_role_arn: HelloRole
6
7
  app:
7
8
  image: ryotarai/hello-sinatra
8
9
  memory: 128
data/hako.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency 'aws-sdk', '>= 2.1.0'
21
+ spec.add_dependency 'aws-sdk', '>= 2.3.22'
22
22
 
23
23
  spec.add_development_dependency 'bundler'
24
24
  spec.add_development_dependency 'rake'
data/lib/hako/cli.rb CHANGED
@@ -224,14 +224,15 @@ module Hako
224
224
  end
225
225
 
226
226
  class Remove
227
- def run
227
+ def run(argv)
228
228
  parse!(argv)
229
229
  require 'hako/application'
230
230
  require 'hako/commander'
231
- Commander.new(Application.new(@yaml_path)).remove
231
+ Commander.new(Application.new(@yaml_path)).remove(dry_run: @dry_run)
232
232
  end
233
233
 
234
234
  def parse!(argv)
235
+ @dry_run = false
235
236
  parser.parse!(argv)
236
237
  @yaml_path = argv.first
237
238
 
@@ -245,6 +246,7 @@ module Hako
245
246
  @parser ||= OptionParser.new do |opts|
246
247
  opts.banner = 'hako remove FILE'
247
248
  opts.version = VERSION
249
+ opts.on('-n', '--dry-run', 'Enable dry-run mode') { @dry_run = true }
248
250
  end
249
251
  end
250
252
  end
@@ -59,13 +59,14 @@ module Hako
59
59
 
60
60
  # @return [nil]
61
61
  def status
62
- load_scheduler(@app.yaml['scheduler'], []).status
62
+ load_scheduler(@app.yaml['scheduler'], [], dry_run: false).status
63
63
  end
64
64
 
65
+ # @param [Boolean] dry_run
65
66
  # @return [nil]
66
- def remove
67
+ def remove(dry_run:)
67
68
  scripts = @app.yaml.fetch('scripts', []).map { |config| load_script(config, dry_run: dry_run) }
68
- load_scheduler(@app.yaml['scheduler'], scripts).remove
69
+ load_scheduler(@app.yaml['scheduler'], scripts, dry_run: dry_run).remove
69
70
  scripts.each(&:after_remove)
70
71
  end
71
72
 
@@ -114,7 +115,7 @@ module Hako
114
115
  # @param [Boolean] force
115
116
  # @param [Boolean] dry_run
116
117
  # @return [Scheduler]
117
- def load_scheduler(yaml, scripts, volumes: [], force: false, dry_run: false)
118
+ def load_scheduler(yaml, scripts, volumes: [], force: false, dry_run:)
118
119
  Loader.new(Hako::Schedulers, 'hako/schedulers').load(yaml.fetch('type')).new(@app.id, yaml, volumes: volumes, scripts: scripts, force: force, dry_run: dry_run)
119
120
  end
120
121
 
@@ -19,6 +19,7 @@ module Hako
19
19
  @desired_count = options.fetch('desired_count', nil)
20
20
  @region = options.fetch('region') { validation_error!('region must be set') }
21
21
  @role = options.fetch('role', nil)
22
+ @task_role_arn = options.fetch('task_role_arn', nil)
22
23
  @ecs_elb_options = options.fetch('elb', nil)
23
24
  @started_at = nil
24
25
  @container_instance_arn = nil
@@ -189,8 +190,14 @@ module Hako
189
190
  def remove
190
191
  service = describe_service
191
192
  if service
192
- ecs_client.delete_service(cluster: @cluster, service: @app_id)
193
- Hako.logger.info "#{service.service_arn} is deleted"
193
+ if @dry_run
194
+ Hako.logger.info "ecs_client.update_service(cluster: #{@cluster}, service: #{@app_id}, desired_count: 0)"
195
+ Hako.logger.info "ecs_client.delete_service(cluster: #{@cluster}, service: #{@app_id})"
196
+ else
197
+ ecs_client.update_service(cluster: @cluster, service: @app_id, desired_count: 0)
198
+ ecs_client.delete_service(cluster: @cluster, service: @app_id)
199
+ Hako.logger.info "#{service.service_arn} is deleted"
200
+ end
194
201
  else
195
202
  puts "Service #{@app_id} doesn't exist"
196
203
  end
@@ -212,7 +219,7 @@ module Hako
212
219
 
213
220
  # @return [EcsElb]
214
221
  def ecs_elb_client
215
- @ecs_elb_client ||= EcsElb.new(@app_id, Aws::ElasticLoadBalancing::Client.new(region: @region), @ecs_elb_options)
222
+ @ecs_elb_client ||= EcsElb.new(@app_id, Aws::ElasticLoadBalancing::Client.new(region: @region), @ecs_elb_options, dry_run: @dry_run)
216
223
  end
217
224
 
218
225
  # @return [Aws::ECS::Types::Service, nil]
@@ -284,6 +291,9 @@ module Hako
284
291
  container_definitions[c.name] = c
285
292
  end
286
293
 
294
+ if task_definition.task_role_arn != @task_role_arn
295
+ return true
296
+ end
287
297
  if different_volumes?(task_definition.volumes)
288
298
  return true
289
299
  end
@@ -328,6 +338,7 @@ module Hako
328
338
  if task_definition_changed?(@app_id, definitions)
329
339
  ecs_client.register_task_definition(
330
340
  family: @app_id,
341
+ task_role_arn: @task_role_arn,
331
342
  container_definitions: definitions,
332
343
  volumes: volumes_definition,
333
344
  ).task_definition
@@ -351,6 +362,7 @@ module Hako
351
362
  if task_definition_changed?(family, definitions)
352
363
  ecs_client.register_task_definition(
353
364
  family: "#{@app_id}-oneshot",
365
+ task_role_arn: @task_role_arn,
354
366
  container_definitions: definitions,
355
367
  volumes: volumes_definition,
356
368
  ).task_definition
@@ -8,10 +8,12 @@ module Hako
8
8
  # @param [String] app_id
9
9
  # @param [Aws::ElasticLoadBalancing::Client] elb
10
10
  # @param [Hash] elb_config
11
- def initialize(app_id, elb, elb_config)
11
+ # @param [Boolean] dry_run
12
+ def initialize(app_id, elb, elb_config, dry_run:)
12
13
  @app_id = app_id
13
14
  @elb = elb
14
15
  @elb_config = elb_config
16
+ @dry_run = dry_run
15
17
  end
16
18
 
17
19
  # @return [Aws::ElasticLoadBalancing::Types::LoadBalancerDescription]
@@ -49,8 +51,12 @@ module Hako
49
51
  # @return [nil]
50
52
  def destroy
51
53
  if exist?
52
- @elb.delete_load_balancer(load_balancer_name: name)
53
- Hako.logger.info "Deleted ELB #{name}"
54
+ if @dry_run
55
+ Hako.logger.info("@elb.delete_load_balancer(load_balancer_name: #{name})")
56
+ else
57
+ @elb.delete_load_balancer(load_balancer_name: name)
58
+ Hako.logger.info "Deleted ELB #{name}"
59
+ end
54
60
  else
55
61
  Hako.logger.info "ELB #{name} doesn't exist"
56
62
  end
data/lib/hako/script.rb CHANGED
@@ -37,6 +37,9 @@ module Hako
37
37
  def oneshot_finished(_containers)
38
38
  end
39
39
 
40
+ def after_remove
41
+ end
42
+
40
43
  private
41
44
 
42
45
  # @param [Hash] _options
data/lib/hako/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Hako
3
- VERSION = '0.15.3'
3
+ VERSION = '0.16.0'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hako
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.3
4
+ version: 0.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kohei Suzuki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-05-23 00:00:00.000000000 Z
11
+ date: 2016-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.1.0
19
+ version: 2.3.22
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 2.1.0
26
+ version: 2.3.22
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement