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)}"