hako 2.7.0 → 2.8.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
  SHA256:
3
- metadata.gz: 5e976128af20ee669b05e2e9531dc84d3b0ad46dcba305fa732cfbf0e24215dc
4
- data.tar.gz: 0cde6cd9e06468444bd63a55f869424b3daae0926d6b8cd9a049e5511ba8ef30
3
+ metadata.gz: 3eeaab8400e80caccbf550eed190e25ca59d729f04f450c0fa3c34596036a0af
4
+ data.tar.gz: '039cc2afb69aacceaa40976bb74dca8be034dc4e4780423c4a5d30040f17775f'
5
5
  SHA512:
6
- metadata.gz: 27279574a6d795bbe859463056f7460b501e3d2a0c38f6fa147aeafb419970ec9a02efed532fd35497f040a5fcb758145d224e6611bcc68cc003e586dc101753
7
- data.tar.gz: ebb6948d88f10ff6f8ad3e7dbc3f47ea674cfb45d35b391c6611de9cbdb87bd73ea8cca02112f2dc4e27b6798a9e0308bb437aaa5db2586e2d2e747e7363ad8e
6
+ metadata.gz: 84b31ceebf0c3bc2cc3262b8b977d092269b527c6d33c1082ee01715514e61c8e439a1c78390e96590cf5d8777a44e120d631bd269269c3219c0b7818109f5d2
7
+ data.tar.gz: 136f00906ce0b1e94a67d4fe6a0919efecae7744a402fba58f0cbd4ff86f9dd6f8187a6bdd68ca52002f000c998efd87404dcf5536918360fac047a5d900db47
@@ -1,3 +1,9 @@
1
+ # 2.8.0 (2019-03-17)
2
+ ## New features
3
+ - Add `deploy_failed` method to Hako::Script which is called when `hako deploy` fails
4
+ - Add .app.tag field to definition to specify the default value of app container's tag
5
+ - The default value was fixed to "latest", but you can now specify custom default value.
6
+
1
7
  # 2.7.0 (2019-03-15)
2
8
  ## New features
3
9
  - Support `entry_point` parameter
@@ -6,7 +6,7 @@ module Hako
6
6
  class AppContainer < Container
7
7
  # @return [String]
8
8
  def image_tag
9
- "#{@definition['image']}:#{@definition['tag']}"
9
+ "#{@definition['image']}:#{@definition.fetch('tag', 'latest')}"
10
10
  end
11
11
  end
12
12
  end
@@ -80,7 +80,6 @@ module Hako
80
80
 
81
81
  def parse!(argv)
82
82
  @force = false
83
- @tag = 'latest'
84
83
  @dry_run = false
85
84
  @verbose = false
86
85
  @timeout = DEFAULT_TIMEOUT
@@ -98,7 +97,7 @@ module Hako
98
97
  opts.banner = 'hako deploy [OPTIONS] FILE'
99
98
  opts.version = VERSION
100
99
  opts.on('-f', '--force', 'Run deployment even if nothing is changed') { @force = true }
101
- opts.on('-t', '--tag=TAG', 'Specify tag (default: latest)') { |v| @tag = v }
100
+ opts.on('-t', '--tag=TAG', 'Specify tag') { |v| @tag = v }
102
101
  opts.on('-n', '--dry-run', 'Enable dry-run mode') { @dry_run = true }
103
102
  opts.on('-v', '--verbose', 'Enable verbose logging') { @verbose = true }
104
103
  opts.on('--timeout=TIMEOUT_SEC', "Timeout deployment after TIMEOUT_SEC seconds (default: #{DEFAULT_TIMEOUT})") { |v| @timeout = v.to_i }
@@ -167,7 +166,6 @@ module Hako
167
166
  end
168
167
 
169
168
  def parse!(argv)
170
- @tag = 'latest'
171
169
  @dry_run = false
172
170
  @containers = []
173
171
  @env = {}
@@ -187,7 +185,7 @@ module Hako
187
185
  @parser ||= OptionParser.new do |opts|
188
186
  opts.banner = 'hako oneshot [OPTIONS] FILE COMMAND ARG...'
189
187
  opts.version = VERSION
190
- opts.on('-t', '--tag=TAG', 'Specify tag (default: latest)') { |v| @tag = v }
188
+ opts.on('-t', '--tag=TAG', 'Specify tag') { |v| @tag = v }
191
189
  opts.on('-n', '--dry-run', 'Enable dry-run mode') { @dry_run = true }
192
190
  opts.on('-c', '--container=NAME', 'Additional container name to start with the app container') { |v| @containers << v }
193
191
  opts.on('-v', '--verbose', 'Enable verbose logging') { @verbose = true }
@@ -15,10 +15,10 @@ module Hako
15
15
  end
16
16
 
17
17
  # @param [Boolean] force
18
- # @param [String] tag
18
+ # @param [String, nil] tag
19
19
  # @param [Boolean] dry_run
20
20
  # @return [nil]
21
- def deploy(force: false, tag: 'latest', dry_run: false, timeout:)
21
+ def deploy(force: false, tag:, dry_run: false, timeout:)
22
22
  containers = load_containers(tag, dry_run: dry_run)
23
23
  scripts = @app.definition.fetch('scripts', []).map { |config| load_script(config, dry_run: dry_run) }
24
24
  volumes = @app.definition.fetch('volumes', {})
@@ -42,7 +42,7 @@ module Hako
42
42
  end
43
43
 
44
44
  # @param [Array<String>] commands
45
- # @param [String] tag
45
+ # @param [String, nil] tag
46
46
  # @param [Hash<String, String>] env
47
47
  # @param [Boolean] dry_run
48
48
  # @param [Boolean] no_wait
@@ -110,12 +110,12 @@ module Hako
110
110
  exit_code
111
111
  end
112
112
 
113
- # @param [String] tag
113
+ # @param [String, nil] tag
114
114
  # @param [Boolean] dry_run
115
115
  # @param [Array<String>, nil] with
116
116
  # @return [Hash<String, Container>]
117
117
  def load_containers(tag, dry_run:, with: nil)
118
- DefinitionLoader.new(@app, dry_run: dry_run).load(tag, with: with)
118
+ DefinitionLoader.new(@app, dry_run: dry_run).load(tag: tag, with: with)
119
119
  end
120
120
 
121
121
  # @param [Hash] scheduler_definition
@@ -14,10 +14,10 @@ module Hako
14
14
  @dry_run = dry_run
15
15
  end
16
16
 
17
- # @param [String] tag
17
+ # @param [String, nil] tag
18
18
  # @param [Array<String>, nil] with
19
19
  # @return [Hash<String, Container>]
20
- def load(tag, with: nil)
20
+ def load(tag: nil, with: nil)
21
21
  # XXX: Load additional_containers for compatibility
22
22
  sidecars = @app.definition.fetch('sidecars', @app.definition.fetch('additional_containers', {}))
23
23
  container_names = ['app']
@@ -32,7 +32,7 @@ module Hako
32
32
 
33
33
  private
34
34
 
35
- # @param [String] tag
35
+ # @param [String, nil] tag
36
36
  # @param [Array<String>] container_names
37
37
  # @param [Hash<String, Hash>] sidecars
38
38
  # @return [Hash<String, Container>]
@@ -44,7 +44,8 @@ module Hako
44
44
  containers[name] =
45
45
  case name
46
46
  when 'app'
47
- AppContainer.new(@app, @app.definition['app'].merge('tag' => tag), dry_run: @dry_run)
47
+ @app.definition['app']['tag'] = tag if tag
48
+ AppContainer.new(@app, @app.definition['app'], dry_run: @dry_run)
48
49
  else
49
50
  Container.new(@app, sidecars.fetch(name), dry_run: @dry_run)
50
51
  end
@@ -150,6 +150,7 @@ module Hako
150
150
  @service_discovery.apply
151
151
  end
152
152
  unless wait_for_ready(service)
153
+ @scripts.each { |script| script.deploy_failed(containers, task_ids: @started_task_ids) }
153
154
  if task_definition_changed
154
155
  Hako.logger.error("Rolling back to #{current_service.task_definition}")
155
156
  update_service(service, current_service.task_definition)
@@ -912,7 +913,7 @@ module Hako
912
913
  Process.clock_gettime(Process::CLOCK_MONOTONIC)
913
914
  end
914
915
 
915
- started_task_ids = []
916
+ @started_task_ids = []
916
917
 
917
918
  loop do
918
919
  if started_at
@@ -936,16 +937,16 @@ module Hako
936
937
  Hako.logger.info "#{e.created_at}: #{e.message}"
937
938
  task_id = extract_task_id(e.message)
938
939
  if task_id && e.message.include?(' has started ')
939
- started_task_ids << task_id
940
+ @started_task_ids << task_id
940
941
  end
941
942
  end
942
943
  latest_event_id = find_latest_event_id(s.events)
943
944
  Hako.logger.debug " latest_event_id=#{latest_event_id}, deployments=#{s.deployments}"
944
945
  no_active = s.deployments.all? { |d| d.status != 'ACTIVE' }
945
946
  primary = s.deployments.find { |d| d.status == 'PRIMARY' }
946
- if primary.desired_count < started_task_ids.size
947
+ if primary.desired_count < @started_task_ids.size
947
948
  Hako.logger.error('Some started tasks are stopped. It seems new deployment is failing to start')
948
- ecs_client.describe_tasks(cluster: service.cluster_arn, tasks: started_task_ids).tasks.each do |task|
949
+ ecs_client.describe_tasks(cluster: service.cluster_arn, tasks: @started_task_ids).tasks.each do |task|
949
950
  report_task_diagnostics(task)
950
951
  end
951
952
  return false
@@ -23,6 +23,10 @@ module Hako
23
23
  # @param [Hash<String, Container>] _containers
24
24
  def deploy_finished(_containers); end
25
25
 
26
+ # @param [Hash<String, Container>] _containers
27
+ # @param [Hash] _options
28
+ def deploy_failed(_containers, _options); end
29
+
26
30
  def rollback_starting; end
27
31
 
28
32
  # @param [String] _current_image_tag
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Hako
4
- VERSION = '2.7.0'
4
+ VERSION = '2.8.0'
5
5
  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: 2.7.0
4
+ version: 2.8.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: 2019-03-15 00:00:00.000000000 Z
11
+ date: 2019-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-applicationautoscaling