Source code for ecs_composex.ecs.ecs_firelens.firelens_advanced_rendered_settings

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

from __future__ import annotations

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from ecs_composex.ecs.ecs_family import ComposeFamily
    from ecs_composex.common.settings import ComposeXSettings

from compose_x_common.compose_x_common import set_else_none
from troposphere import AWSHelperFn, Ref, Region
from troposphere.ecs import Environment

from ecs_composex.common.logging import LOG
from ecs_composex.compose.compose_services.helpers import extend_container_envvars
from ecs_composex.compose.compose_volumes.ecs_family_helpers import set_volumes

from .ecs_firelens_advanced import FireLensFamilyManagedConfiguration


[docs]def finalize_firelens_container_shorthands( family: ComposeFamily, advanced_config: FireLensFamilyManagedConfiguration ) -> None: """ Checks the FirelensConfiguration.Options settings set on each services of the task family. If it finds settings, updates the default settings with the new value. First service in the family to have the settings win. There should be only one service with the x-logging.Firelens config set not to overlap. """ service_defined_firelens_options: dict = {} for _service, _svc_config in advanced_config.services_configs.items(): if _service not in family.ordered_services: continue if not service_defined_firelens_options: service_defined_firelens_options: dict = set_else_none( "Options", _svc_config.firelens_config, {} ) else: LOG.warning( "{}.logging: FirelensConfiguration." "Options already imported. Ignoring settings from {}".format( family.name, _service.name ) ) firelens_options: dict = { "config-file-value": f"{advanced_config.volume_mount}{advanced_config.config_file_name}", "config-file-type": "file", "enable-ecs-log-metadata": True, } firelens_options.update(service_defined_firelens_options) family.logging.firelens_service.firelens_config = { "Type": "fluentbit", "Options": firelens_options, }
[docs]def handle_firelens_advanced_settings( family: ComposeFamily, settings: ComposeXSettings ) -> FireLensFamilyManagedConfiguration: """ Handles x-logging.FireLens.Advanced.Rendered :param ComposeFamily family: :param ComposeXSettings settings: """ advanced_config = FireLensFamilyManagedConfiguration(family, settings) advanced_config.set_update_ssm_parameter(settings) env_vars = [ Environment(Name=name, Value=str(value)) for name, value in advanced_config.extra_env_vars.items() if isinstance(value, (int, float, str, bool)) ] env_vars += [ Environment(Name=name, Value=value) for name, value in advanced_config.extra_env_vars.items() if isinstance(value, AWSHelperFn) or issubclass(type(value), AWSHelperFn) ] extend_container_envvars( family.logging.firelens_service.container_definition, env_vars ) extend_container_envvars( family.logging.firelens_config_service.container_definition, env_vars ) family.logging.firelens_config_service.add_to_family(family, is_dependency=True) family.logging.firelens_config_service.logging.set_update_log_configuration( LogDriver="awslogs", Options={ "awslogs-group": Ref(family.logging.family_log_group), "awslogs-region": Region, "awslogs-stream-prefix": family.logging.firelens_config_service.name, }, ) set_volumes(family) finalize_firelens_container_shorthands(family, advanced_config) return advanced_config