Source code for ecs_composex.ecs.ecs_firelens.ecs_firelens_advanced.config_parameter
# SPDX-License-Identifier: MPL-2.0
# Copyright 2020-2022 John Mille <john@compose-x.io>
"""
Manages to add the SSM Parameter for FireLens configuration
"""
from __future__ import annotations
from json import dumps
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from ecs_composex.ecs.ecs_family import ComposeFamily
from ecs_composex.common.settings import ComposeXSettings
from ecs_composex.common.troposphere_tools import add_outputs, add_resource
from ecs_composex.ssm_parameter.ssm_parameter_helpers import render_new_parameters
from ecs_composex.ssm_parameter.ssm_parameter_stack import SsmParameter
[docs]def add_managed_ssm_parameter(
family: ComposeFamily, settings: ComposeXSettings, content: dict
) -> SsmParameter:
"""
Handles x-logging.FireLens.Advanced.Rendered
:param family:
:param settings:
:param content:
"""
ssm_parameter_title = f"{family.logical_name}FireLensConfigurationSsm"
ssm_parameter_definition = {
"Properties": {
"DataType": "text",
"Type": "String",
"Value": dumps(content),
},
"MacroParameters": {"EncodeToBase64": True},
"Services": {family.name: {"Access": "RO"}},
}
if "x-ssm_parameter" not in settings.mod_manager.modules:
x_ssm_content: dict = {ssm_parameter_title: ssm_parameter_definition}
ssm_module = settings.mod_manager.load_module(
"x-ssm_parameter", res_def=x_ssm_content
)
settings.compose_content[ssm_module.res_key] = ssm_module.definition
ssm_module.set_resources(settings)
else:
ssm_module = settings.mod_manager.modules["x-ssm_parameter"]
settings.compose_content[ssm_module.res_key].update(
{ssm_parameter_title: ssm_parameter_definition}
)
if not ssm_module:
raise LookupError("Failed to import x-ssm_parameter module!")
if ssm_module.mapping_key not in settings.stacks:
ssm_stack = ssm_module.stack_class(ssm_module.mod_key, settings, ssm_module)
settings.stacks[ssm_module.mapping_key] = ssm_stack
add_resource(settings.root_stack.stack_template, ssm_stack)
ssm_parameter = settings.find_resource(
f"x-ssm_parameter::{ssm_parameter_title}"
)
else:
ssm_stack = settings.stacks[ssm_module.mapping_key]
ssm_parameter = SsmParameter(
ssm_parameter_title, ssm_parameter_definition, ssm_module, settings
)
render_new_parameters([ssm_parameter], ssm_stack)
ssm_parameter.stack = ssm_stack
ssm_parameter.init_outputs()
ssm_parameter.generate_outputs()
add_resource(ssm_parameter.stack.stack_template, ssm_parameter.cfn_resource)
add_outputs(ssm_parameter.stack.stack_template, ssm_parameter.outputs)
ssm_parameter.to_ecs(settings, settings.mod_manager)
settings.compose_content[ssm_module.res_key][ssm_parameter.name] = ssm_parameter
ssm_module.resources[ssm_parameter_title] = ssm_parameter
return ssm_parameter