lib/hako/schedulers/ecs.rb in hako-2.0.3 vs lib/hako/schedulers/ecs.rb in hako-2.0.4
- old
+ new
@@ -42,11 +42,11 @@
# awsvpc network mode requires ELB target group with target_type=ip
@ecs_elb_v2_options['target_type'] = 'ip'
end
@dynamic_port_mapping = options.fetch('dynamic_port_mapping', @ecs_elb_options.nil?)
if options.key?('autoscaling')
- @autoscaling = EcsAutoscaling.new(options.fetch('autoscaling'), dry_run: @dry_run)
+ @autoscaling = EcsAutoscaling.new(options.fetch('autoscaling'), @region, dry_run: @dry_run)
end
@autoscaling_group_for_oneshot = options.fetch('autoscaling_group_for_oneshot', nil)
@autoscaling_topic_for_oneshot = options.fetch('autoscaling_topic_for_oneshot', nil)
if @autoscaling_topic_for_oneshot && !@autoscaling_group_for_oneshot
validation_error!('autoscaling_group_for_oneshot must be set when autoscaling_topic_for_oneshot is set')
@@ -937,11 +937,11 @@
end
end
RUN_TASK_INTERVAL = 10
def try_scale_out_with_sns(task_definition)
- required_cpu, required_memory = task_definition.container_definitions.inject([0, 0]) { |(cpu, memory), d| [cpu + d.cpu, memory + d.memory] }
+ required_cpu, required_memory = task_definition.container_definitions.inject([0, 0]) { |(cpu, memory), d| [cpu + d.cpu, memory + (d.memory_reservation || d.memory)] }
@hako_task_id ||= SecureRandom.uuid
message = JSON.dump(
group_name: @autoscaling_group_for_oneshot,
cluster: @cluster,
cpu: required_cpu,
@@ -1020,11 +1020,11 @@
# @param [Aws::ECS::Types::TaskDefinition] task_definition
# @param [Array<Aws::ECS::Types::ContainerInstance>] container_instances
# @return [Boolean]
def has_capacity?(task_definition, container_instances)
- required_cpu, required_memory = task_definition.container_definitions.inject([0, 0]) { |(cpu, memory), d| [cpu + d.cpu, memory + d.memory] }
+ required_cpu, required_memory = task_definition.container_definitions.inject([0, 0]) { |(cpu, memory), d| [cpu + d.cpu, memory + (d.memory_reservation || d.memory)] }
container_instances.any? do |ci|
cpu = ci.remaining_resources.find { |r| r.name == 'CPU' }.integer_value
memory = ci.remaining_resources.find { |r| r.name == 'MEMORY' }.integer_value
required_cpu <= cpu && required_memory <= memory
end
@@ -1035,10 +1035,12 @@
# @return [nil]
def print_definition_in_cli_format(definition, additional_env: {})
cmd = %w[docker run]
cmd << '--name' << definition.fetch(:name)
cmd << '--cpu-shares' << definition.fetch(:cpu)
- cmd << '--memory' << definition.fetch(:memory)
+ if definition[:memory]
+ cmd << '--memory' << "#{definition[:memory]}M"
+ end
definition.fetch(:links).each do |link|
cmd << '--link' << link
end
definition.fetch(:port_mappings).each do |port_mapping|
cmd << '--publish' << "#{port_mapping.fetch(:host_port)}:#{port_mapping.fetch(:container_port)}"