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)