Source code for aws_ops_alpha.project.simple_cdk.step

# -*- coding: utf-8 -*-

"""
This module implements the automation to deploy CloudFormation stack via CDK.

Developer note:

    every function in the ``step.py`` module should have visualized logging.
"""

# --- standard library
import typing as T
from pathlib import Path

# --- third party library (include vendor)
import aws_console_url.api as aws_console_url
import tt4human.api as tt4human
from ...vendor.emoji import Emoji

# --- modules from this project
from ...logger import logger
from ...aws_helpers import aws_cdk_helpers
from ...rule_set import should_we_do_it

#--- modules from this submodule
from .simple_cdk_truth_table import StepEnum, truth_table

# --- type hint
if T.TYPE_CHECKING:  # pragma: no cover
    from boto_session_manager import BotoSesManager


[docs]@logger.emoji_block( msg="Run 'cdk deploy'", emoji=Emoji.cloudformation, ) def cdk_deploy( semantic_branch_name: str, runtime_name: str, env_name: str, bsm_devops: "BotoSesManager", bsm_workload: "BotoSesManager", dir_cdk: Path, stack_name: str, skip_prompt: bool = False, check: bool = True, step: str = StepEnum.deploy_cdk_stack.value, truth_table: T.Optional[tt4human.TruthTable] = truth_table, url: T.Optional[str] = None, ): # pragma: no cover """ Run ``cdk deploy ...`` terminal command. """ logger.info(f"deploy cloudformation to {env_name!r} env ...") aws_console = aws_console_url.AWSConsole.from_bsm(bsm=bsm_workload) console_url = aws_console.cloudformation.filter_stack(name=stack_name) logger.info(f"preview cloudformation stack: {console_url}") if check: flag = should_we_do_it( step=step, semantic_branch_name=semantic_branch_name, runtime_name=runtime_name, env_name=env_name, truth_table=truth_table, google_sheet_url=url, ) if flag is False: return aws_cdk_helpers.cdk_deploy( bsm_devops=bsm_devops, bsm_workload=bsm_workload, env_name=env_name, dir_cdk=dir_cdk, skip_prompt=skip_prompt, )
[docs]@logger.emoji_block( msg="Run 'cdk destroy'", emoji=Emoji.cloudformation, ) def cdk_destroy( semantic_branch_name: str, runtime_name: str, env_name: str, bsm_devops: "BotoSesManager", bsm_workload: "BotoSesManager", dir_cdk: Path, stack_name: str, skip_prompt: bool = False, check: bool = True, step: str = StepEnum.delete_cdk_stack.value, truth_table: T.Optional[tt4human.TruthTable] = truth_table, url: T.Optional[str] = None, ): # pragma: no cover """ Run ``cdk destroy ...`` terminal command. """ logger.info(f"delete cloudformation from {env_name!r} env ...") aws_console = aws_console_url.AWSConsole.from_bsm(bsm=bsm_workload) console_url = aws_console.cloudformation.filter_stack(name=stack_name) logger.info(f"preview cloudformation stack: {console_url}") if check: flag = should_we_do_it( step=step, semantic_branch_name=semantic_branch_name, env_name=env_name, runtime_name=runtime_name, truth_table=truth_table, google_sheet_url=url, ) if flag is False: return aws_cdk_helpers.cdk_destroy( bsm_devops=bsm_devops, bsm_workload=bsm_workload, env_name=env_name, dir_cdk=dir_cdk, skip_prompt=skip_prompt, )