lib/hako/schedulers/ecs.rb in hako-2.13.0 vs lib/hako/schedulers/ecs.rb in hako-2.14.0

- old
+ new

@@ -98,10 +98,11 @@ end end if options['service_discovery'] @service_discovery = EcsServiceDiscovery.new(options.fetch('service_discovery'), @region, dry_run: @dry_run) end + @tags = options.fetch('tags', {}).map { |k, v| { key: k, value: v.to_s } } @started_at = nil @container_instance_arn = nil end @@ -462,12 +463,13 @@ end end # @param [Array<Hash>] desired_definitions # @param [Aws::ECS::Types::TaskDefinition] actual_definition - # @return [Array<Boolean] - def task_definition_changed?(desired_definitions, actual_definition) + # @param [Array<Aws::ECS::Types::Tag>] actual_tags + # @return [Array<Boolean>] + def task_definition_changed?(desired_definitions, actual_definition, actual_tags) if @force return true end unless actual_definition # Initial deployment @@ -511,10 +513,15 @@ return true end if actual_definition.requires_compatibilities != @requires_compatibilities return true end + actual_tags_set = Set.new(actual_tags.map { |t| {key: t.key, value: t.value } }) + tags_set = Set.new(@tags) + if actual_tags_set != tags_set + return true + end false end # @param [Hash] expected_volume @@ -533,21 +540,25 @@ # @param [Array<Hash>] definitions # @return [Array<Boolean, Aws::ECS::Types::TaskDefinition>] def register_task_definition(definitions) current_task_definition = describe_task_definition(@app_id) - if task_definition_changed?(definitions, current_task_definition) + if current_task_definition + current_tags = ecs_client.list_tags_for_resource(resource_arn: current_task_definition.task_definition_arn).tags + end + if task_definition_changed?(definitions, current_task_definition, current_tags) new_task_definition = ecs_client.register_task_definition( family: @app_id, task_role_arn: @task_role_arn, execution_role_arn: @execution_role_arn, network_mode: @network_mode, container_definitions: definitions, volumes: volumes_definition, requires_compatibilities: @requires_compatibilities, cpu: @cpu, memory: @memory, + tags: @tags.empty? ? nil : @tags, ).task_definition [true, new_task_definition] else [false, current_task_definition] end @@ -566,21 +577,25 @@ def register_task_definition_for_oneshot(definitions) 10.times do |i| begin family = "#{@app_id}-oneshot" current_task_definition = describe_task_definition(family) - if task_definition_changed?(definitions, current_task_definition) + if current_task_definition + current_tags = ecs_client.list_tags_for_resource(resource_arn: current_task_definition.task_definition_arn).tags + end + if task_definition_changed?(definitions, current_task_definition, current_tags) new_task_definition = ecs_client.register_task_definition( family: family, task_role_arn: @task_role_arn, execution_role_arn: @execution_role_arn, network_mode: @network_mode, container_definitions: definitions, volumes: volumes_definition, requires_compatibilities: @requires_compatibilities, cpu: @cpu, memory: @memory, + tags: @tags.empty? ? nil : @tags, ).task_definition return [true, new_task_definition] else return [false, current_task_definition] end @@ -660,10 +675,11 @@ ulimits: container.ulimits, extra_hosts: container.extra_hosts, readonly_root_filesystem: container.readonly_root_filesystem, docker_security_options: container.docker_security_options, system_controls: container.system_controls, + repository_credentials: container.repository_credentials, } end # @param [Aws::ECS::Types::TaskDefinition] task_definition # @param [Array<String>] commands @@ -680,10 +696,11 @@ started_by: 'hako oneshot', launch_type: @launch_type, capacity_provider_strategy: @capacity_provider_strategy, platform_version: @platform_version, network_configuration: @network_configuration, + propagate_tags: 'TASK_DEFINITION', ) result.failures.each do |failure| Hako.logger.error("#{failure.arn} #{failure.reason}") end if result.tasks.empty? @@ -922,9 +939,10 @@ launch_type: @launch_type, capacity_provider_strategy: @capacity_provider_strategy, platform_version: @platform_version, network_configuration: @network_configuration, health_check_grace_period_seconds: @health_check_grace_period_seconds, + propagate_tags: 'TASK_DEFINITION', } if @scheduling_strategy != 'DAEMON' params[:desired_count] = 0 end if ecs_elb_client.find_or_create_load_balancer(front_port)