Source code for ecs_composex.ecs.service_compute.helpers

#  SPDX-License-Identifier: MPL-2.0
#  Copyright 2020-2022 John Mille <john@compose-x.io>

from compose_x_common.compose_x_common import keypresent, set_else_none
from troposphere.ecs import CapacityProviderStrategyItem

from ecs_composex.common.logging import LOG


[docs]def merge_capacity_providers(service_compute): """ Merge capacity providers set on the services of the task service_compute.family if service is not sidecar """ task_config = {} for svc in service_compute.family.ordered_services: if not svc.capacity_provider_strategy or svc.is_aws_sidecar: continue for provider in svc.capacity_provider_strategy: if provider["CapacityProvider"] not in task_config.keys(): name = provider["CapacityProvider"] task_config[name] = { "Base": [], "Weight": [], "CapacityProvider": name, } task_config[name]["Base"].append( set_else_none("Base", provider, alt_value=0) ) task_config[name]["Weight"].append( set_else_none("Weight", provider, alt_value=0) ) for count, provider in enumerate(task_config.values()): if count == 0: provider["Base"] = int(max(provider["Base"])) elif count > 0 and keypresent("Base", provider): del provider["Base"] LOG.warning( f"{service_compute.family.name}.x-ecs Only one capacity provider can have a base value. " f"Deleting Base for {provider['CapacityProvider']}" ) provider["Weight"] = int(max(provider["Weight"])) service_compute.ecs_capacity_providers = [ CapacityProviderStrategyItem(**config) for config in task_config.values() ]