hako 2.11.1 → 2.12.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: 9a98d5923ebdf748ea9b2520a31b8e9081907a5e786866e0a108e8fb75cb12f6
4
- data.tar.gz: ba1ed9526beb23c582b45da2e3d4da5b6fbfd1cb503bd98543bc5cfd3356855b
3
+ metadata.gz: 3778068a414fb367352ba788d4d957e863848258766bbc59efc5cf6a7b5344b5
4
+ data.tar.gz: c9e21cd8877bd3445739d328551fb85b28457e19fb12ff770ac53b604ab021be
5
5
  SHA512:
6
- metadata.gz: e78054720c6d8c06c5158e188f8d496972396b3d289546f2fb592462f7df28fbfec76746e8ab5d6a7e137729f7c2bd0bc2c73c311052c9ca56ba20593cd88864
7
- data.tar.gz: a769ebb32b9ea79fecfbe34f8c25264781ce81efa5ab0dd9949f0305a84875aca65956b009eaf76816b64d178256f719e056a2b2dcc4f04950cf42e1b152ef13
6
+ metadata.gz: d8d4beb5835cb3efe38fdfae553b50ebfd254fff8df7c454a8087105158dbfb5b655e83472e47c27934d365146d0b4d34fd4babefa850963f06ec6c50319ac66
7
+ data.tar.gz: ab158b547e18cb9a6231ee3726d5ba99934847f53699ef57cacc4779bc3551b2b1dfe51951d986904871b35286d7cc468f2cc683b6f5d3e15d7961b867395cd8
@@ -1,8 +1,10 @@
1
1
  language: ruby
2
2
  sudo: false
3
3
  rvm:
4
- - 2.3.4
5
- - 2.4.1
4
+ - 2.3.8
5
+ - 2.4.6
6
+ - 2.5.5
7
+ - 2.6.3
6
8
  - ruby-head
7
9
  before_install:
8
10
  - gem update --system # https://github.com/rubygems/rubygems/pull/1819
@@ -1,3 +1,13 @@
1
+ # 2.12.0 (2019-09-09)
2
+ ## New features
3
+ - Support more overrides options for `hako oneshot`
4
+ - `--app-cpu`, `--app-memory` and `--app-memory-reservation` are added
5
+
6
+ ## Bug fixes
7
+ - Show `--health-*` options in dry-run
8
+
9
+ ## Bug fixes
10
+
1
11
  # 2.11.1 (2019-05-17)
2
12
  ## Bug fixes
3
13
  - Fix comparison of `system_controls` parameter
@@ -147,6 +147,8 @@ module Hako
147
147
  end
148
148
 
149
149
  class Oneshot
150
+ Overrides = Struct.new(:app_cpu, :app_memory, :app_memory_reservation)
151
+
150
152
  def run(argv)
151
153
  parse!(argv)
152
154
  require 'hako/application'
@@ -162,7 +164,7 @@ module Hako
162
164
  else
163
165
  {}
164
166
  end
165
- Commander.new(Application.new(@definition_path, options)).oneshot(@argv, tag: @tag, containers: @containers, env: @env, dry_run: @dry_run, no_wait: @no_wait)
167
+ Commander.new(Application.new(@definition_path, options)).oneshot(@argv, tag: @tag, containers: @containers, env: @env, dry_run: @dry_run, no_wait: @no_wait, overrides: @overrides)
166
168
  end
167
169
 
168
170
  def parse!(argv)
@@ -171,6 +173,7 @@ module Hako
171
173
  @env = {}
172
174
  @verbose = false
173
175
  @no_wait = false
176
+ @overrides = Overrides.new
174
177
  parser.parse!(argv)
175
178
  @definition_path = argv.shift
176
179
  @argv = argv
@@ -194,6 +197,9 @@ module Hako
194
197
  k, v = arg.split('=', 2)
195
198
  @env[k] = v
196
199
  end
200
+ opts.on('--app-cpu=VAL', Integer, 'Override the default cpu for the app container') { |v| @overrides.app_cpu = v }
201
+ opts.on('--app-memory=VAL', Integer, 'Override the default memory for the app container') { |v| @overrides.app_memory = v }
202
+ opts.on('--app-memory-reservation=VAL', Integer, 'Override the default memory reservation for the app container') { |v| @overrides.app_memory_reservation = v }
197
203
  end
198
204
  end
199
205
  end
@@ -46,8 +46,9 @@ module Hako
46
46
  # @param [Hash<String, String>] env
47
47
  # @param [Boolean] dry_run
48
48
  # @param [Boolean] no_wait
49
+ # @param [Hako::CLI::Oneshot::Overrides, nil] overrides
49
50
  # @return [nil]
50
- def oneshot(commands, tag:, containers:, env: {}, dry_run: false, no_wait: false)
51
+ def oneshot(commands, tag:, containers:, env: {}, dry_run: false, no_wait: false, overrides: nil)
51
52
  containers = load_containers(tag, dry_run: dry_run, with: containers)
52
53
  scripts = @app.definition.fetch('scripts', []).map { |config| load_script(config, dry_run: dry_run) }
53
54
  volumes = @app.definition.fetch('volumes', {})
@@ -55,7 +56,7 @@ module Hako
55
56
 
56
57
  scripts.each { |script| script.oneshot_starting(containers) }
57
58
  exit_code = with_oneshot_signal_handlers(scheduler) do
58
- scheduler.oneshot(containers, commands, env, no_wait: no_wait)
59
+ scheduler.oneshot(containers, commands, env, no_wait: no_wait, overrides: overrides)
59
60
  end
60
61
  scripts.each { |script| script.oneshot_finished(containers) }
61
62
  exit exit_code
@@ -198,8 +198,9 @@ module Hako
198
198
  # @param [Array<String>] commands
199
199
  # @param [Hash<String, String>] env
200
200
  # @param [Boolean] no_wait
201
+ # @param [Hako::CLI::Oneshot::Overrides, nil] overrides
201
202
  # @return [Integer] Returns exit code
202
- def oneshot(containers, commands, env, no_wait: false)
203
+ def oneshot(containers, commands, env, no_wait: false, overrides: nil)
203
204
  definitions = create_definitions(containers)
204
205
 
205
206
  if @dry_run
@@ -210,7 +211,7 @@ module Hako
210
211
  if d[:name] == 'app'
211
212
  d[:command] = commands
212
213
  end
213
- print_definition_in_cli_format(d, additional_env: env)
214
+ print_definition_in_cli_format(d, additional_env: env, overrides: overrides)
214
215
  check_secrets(d)
215
216
  end
216
217
  0
@@ -221,7 +222,7 @@ module Hako
221
222
  else
222
223
  Hako.logger.info "Task definition isn't changed: #{task_definition.task_definition_arn}"
223
224
  end
224
- @task = run_task(task_definition, commands, env)
225
+ @task = run_task(task_definition, commands, env, overrides)
225
226
  Hako.logger.info "Started task: #{@task.task_arn}"
226
227
  @scripts.each { |script| script.oneshot_started(self) }
227
228
  if no_wait
@@ -658,21 +659,13 @@ module Hako
658
659
  # @param [Aws::ECS::Types::TaskDefinition] task_definition
659
660
  # @param [Array<String>] commands
660
661
  # @param [Hash<String, String>] env
662
+ # @param [Hako::CLI::Oneshot::Overrides] overrides
661
663
  # @return [Aws::ECS::Types::Task]
662
- def run_task(task_definition, commands, env)
663
- environment = env.map { |k, v| { name: k, value: v } }
664
+ def run_task(task_definition, commands, env, overrides)
664
665
  result = ecs_client.run_task(
665
666
  cluster: @cluster,
666
667
  task_definition: task_definition.task_definition_arn,
667
- overrides: {
668
- container_overrides: [
669
- {
670
- name: 'app',
671
- command: commands,
672
- environment: environment,
673
- },
674
- ],
675
- },
668
+ overrides: overrides_option(commands, env, overrides),
676
669
  count: 1,
677
670
  placement_constraints: @placement_constraints,
678
671
  started_by: 'hako oneshot',
@@ -702,6 +695,25 @@ module Hako
702
695
  end
703
696
  end
704
697
 
698
+ # @param [Array<String>] commands
699
+ # @param [Hash<String, String>] env
700
+ # @param [Hako::CLI::Oneshot::Overrides, nil] overrides
701
+ # @doc https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerOverride.html
702
+ def overrides_option(commands, env, overrides)
703
+ {
704
+ container_overrides: [
705
+ {
706
+ name: 'app',
707
+ cpu: overrides&.app_cpu,
708
+ memory: overrides&.app_memory,
709
+ memory_reservation: overrides&.app_memory_reservation,
710
+ command: commands,
711
+ environment: env.map { |k, v| { name: k, value: v } },
712
+ },
713
+ ],
714
+ }
715
+ end
716
+
705
717
  # @return [Fixnum]
706
718
  def wait_for_oneshot_finish
707
719
  containers = wait_for_task(@task)
@@ -1154,17 +1166,33 @@ module Hako
1154
1166
 
1155
1167
  # @param [Hash] definition
1156
1168
  # @param [Hash<String, String>] additional_env
1169
+ # @param [Hako::CLI::Oneshot::Overrides, nil] overrides
1157
1170
  # @return [nil]
1158
- def print_definition_in_cli_format(definition, additional_env: {})
1171
+ def print_definition_in_cli_format(definition, additional_env: {}, overrides: nil)
1159
1172
  cmd = %w[docker run]
1160
1173
  cmd << '--name' << definition.fetch(:name)
1161
- cmd << '--cpu-shares' << definition.fetch(:cpu)
1162
- if definition[:memory]
1163
- cmd << '--memory' << "#{definition[:memory]}M"
1164
- end
1165
- if definition[:memory_reservation]
1166
- cmd << '--memory-reservation' << "#{definition[:memory_reservation]}M"
1174
+
1175
+ if overrides && definition.fetch(:name) == 'app'
1176
+ cpu = overrides.app_cpu || definition.fetch(:cpu)
1177
+ cmd << '--cpu-shares' << cpu
1178
+ memory = overrides.app_memory || definition[:memory]
1179
+ if memory
1180
+ cmd << '--memory' << "#{memory}M"
1181
+ end
1182
+ memory_reservation = overrides.app_memory_reservation || definition[:memory_reservation]
1183
+ if memory_reservation
1184
+ cmd << '--memory-reservation' << "#{memory_reservation}M"
1185
+ end
1186
+ else
1187
+ cmd << '--cpu-shares' << definition.fetch(:cpu)
1188
+ if definition[:memory]
1189
+ cmd << '--memory' << "#{definition[:memory]}M"
1190
+ end
1191
+ if definition[:memory_reservation]
1192
+ cmd << '--memory-reservation' << "#{definition[:memory_reservation]}M"
1193
+ end
1167
1194
  end
1195
+
1168
1196
  definition.fetch(:links).each do |link|
1169
1197
  cmd << '--link' << link
1170
1198
  end
@@ -1227,9 +1255,6 @@ module Hako
1227
1255
  cmd << '--tmpfs' << "#{tmpfs[:container_path]}:#{options.join(',')}"
1228
1256
  end
1229
1257
  end
1230
- definition.fetch(:volumes_from).each do |volumes_from|
1231
- p volumes_from
1232
- end
1233
1258
  if definition[:user]
1234
1259
  cmd << '--user' << definition[:user]
1235
1260
  end
@@ -1247,6 +1272,28 @@ module Hako
1247
1272
  cmd << '--sysctl' << "#{system_control.fetch(:namespace)}=#{system_control.fetch(:value)}"
1248
1273
  end
1249
1274
  end
1275
+ if definition[:health_check]
1276
+ if definition[:health_check][:command]
1277
+ health_check_command_type = definition[:health_check][:command][0]
1278
+ case health_check_command_type
1279
+ when 'NONE'
1280
+ cmd << '--no-healthcheck'
1281
+ when 'CMD', 'CMD-SHELL'
1282
+ health_check_command = definition[:health_check][:command][1..-1].join(' ')
1283
+ cmd << '--health-cmd' << health_check_command.inspect
1284
+ else
1285
+ raise "Health check command type #{health_check_command_type} is not supported. CMD, CMD-SHELL and NONE are supported."
1286
+ end
1287
+ end
1288
+ if definition[:health_check][:retries]
1289
+ cmd << '--health-retries' << definition[:health_check][:retries]
1290
+ end
1291
+ %i[interval timeout start_period].each do |property|
1292
+ if definition[:health_check][property]
1293
+ cmd << "--health-#{property}" << "#{definition[:health_check][property]}s"
1294
+ end
1295
+ end
1296
+ end
1250
1297
 
1251
1298
  cmd << "\\\n "
1252
1299
  definition.fetch(:environment).each do |env|
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Hako
4
- VERSION = '2.11.1'
4
+ VERSION = '2.12.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.11.1
4
+ version: 2.12.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-05-17 00:00:00.000000000 Z
11
+ date: 2019-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-applicationautoscaling