hako 0.15.3 → 0.16.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: 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