def invoke_virtual_desktop_controller()

in source/idea/idea-administrator/src/ideaadministrator/app/cdk/cdk_invoker.py [0:0]


    def invoke_virtual_desktop_controller(self, **kwargs):
        upload_release_package = Utils.get_value_as_bool('upload_release_package', kwargs, True)
        render_bootstrap_package = Utils.get_value_as_bool('render_bootstrap_package', kwargs, True)
        force_build_bootstrap = Utils.get_value_as_bool('force_build_bootstrap', kwargs, True)
        upload_bootstrap_package = Utils.get_value_as_bool('upload_bootstrap_package', kwargs, True)
        deploy_stack = Utils.get_value_as_bool('deploy_stack', kwargs, True)

        cluster_config = ClusterConfig(
            cluster_name=self.cluster_name,
            aws_region=self.aws_region,
            aws_profile=self.aws_profile,
            module_id=self.module_id,
            module_set=self.module_set
        )

        # controller
        controller_bootstrap_context = BootstrapContext(
            config=cluster_config,
            module_name=self.module_name,
            module_id=self.module_id,
            module_set=self.module_set,
            base_os=cluster_config.get_string('virtual-desktop-controller.controller.autoscaling.base_os', required=True),
            instance_type=cluster_config.get_string('virtual-desktop-controller.controller.autoscaling.instance_type', required=True)
        )
        app_package_uri = self.upload_release_package(
            bootstrap_context=controller_bootstrap_context,
            package_name=f'idea-virtual-desktop-controller-{ideaadministrator.props.current_release_version}.tar.gz',
            upload=upload_release_package
        )
        controller_bootstrap_context.vars.controller_package_uri = app_package_uri
        BootstrapUtils.check_and_attach_cloudwatch_logging_and_metrics(
            bootstrap_context=controller_bootstrap_context,
            metrics_namespace=f'{self.cluster_name}/{self.module_id}/controller',
            node_type=constants.NODE_TYPE_APP,
            enable_logging=cluster_config.get_bool('virtual-desktop-controller.cloudwatch_logs.enabled', False),
            log_files=[
                CloudWatchAgentLogFileOptions(
                    file_path='/opt/idea/app/logs/**.log',
                    log_group_name=f'/{self.cluster_name}/{self.module_id}/controller',
                    log_stream_name='application_{ip_address}'
                )
            ]
        )

        # virtual desktop app
        # TODO: remove hard coded bootstrap config after moving virtual-desktop-app to stack
        app_bootstrap_context = BootstrapContext(
            config=cluster_config,
            module_name=constants.MODULE_VIRTUAL_DESKTOP_APP,
            module_id=constants.MODULE_ID_VIRTUAL_DESKTOP_APP,
            module_set="default",
            base_os=cluster_config.get_string('virtual-desktop-controller.controller.autoscaling.base_os', required=True),
            instance_type=cluster_config.get_string('virtual-desktop-controller.controller.autoscaling.instance_type', required=True)
        )
        virtual_desktop_app_package_uri = self.upload_release_package(
            bootstrap_context=app_bootstrap_context,
            package_name=f'idea-virtual-desktop-{ideaadministrator.props.current_release_version}.tar.gz',
            upload=upload_release_package
        )

        # dcv broker
        broker_bootstrap_context = BootstrapContext(
            config=cluster_config,
            module_name=self.module_name,
            module_id=self.module_id,
            module_set=self.module_set,
            base_os=cluster_config.get_string('virtual-desktop-controller.dcv_broker.autoscaling.base_os', required=True),
            instance_type=cluster_config.get_string('virtual-desktop-controller.dcv_broker.autoscaling.instance_type', required=True)
        )

        BootstrapUtils.check_and_attach_cloudwatch_logging_and_metrics(
            bootstrap_context=broker_bootstrap_context,
            metrics_namespace=f'{self.cluster_name}/{self.module_id}/dcv-broker',
            node_type=constants.NODE_TYPE_INFRA,
            enable_logging=cluster_config.get_bool('virtual-desktop-controller.cloudwatch_logs.enabled', False),
            log_files=[
                CloudWatchAgentLogFileOptions(
                    file_path='/var/log/dcv-session-manager-broker/**.log',
                    log_group_name=f'/{self.cluster_name}/{self.module_id}/dcv-broker',
                    log_stream_name='dcv-session-manager-broker_{ip_address}'
                )
            ]
        )

        # dcv connection gateway
        dcv_connection_gateway_bootstrap_context = BootstrapContext(
            config=cluster_config,
            module_name=self.module_name,
            module_id=self.module_id,
            module_set=self.module_set,
            base_os=cluster_config.get_string('virtual-desktop-controller.dcv_connection_gateway.autoscaling.base_os', required=True),
            instance_type=cluster_config.get_string('virtual-desktop-controller.dcv_connection_gateway.autoscaling.instance_type', required=True)
        )
        dcv_connection_gateway_uri = self.upload_release_package(
            bootstrap_context=dcv_connection_gateway_bootstrap_context,
            package_name=f'idea-dcv-connection-gateway-{ideaadministrator.props.current_release_version}.tar.gz',
            upload=upload_release_package
        )
        dcv_connection_gateway_bootstrap_context.vars.dcv_connection_gateway_package_uri = dcv_connection_gateway_uri
        BootstrapUtils.check_and_attach_cloudwatch_logging_and_metrics(
            bootstrap_context=dcv_connection_gateway_bootstrap_context,
            metrics_namespace=f'{self.cluster_name}/{self.module_id}/dcv-connection-gateway',
            node_type=constants.NODE_TYPE_INFRA,
            enable_logging=cluster_config.get_bool('virtual-desktop-controller.cloudwatch_logs.enabled', False),
            log_files=[
                CloudWatchAgentLogFileOptions(
                    file_path='/var/log/dcv-connection-gateway/**.log',
                    log_group_name=f'/{self.cluster_name}/{self.module_id}/dcv-connection-gateway',
                    log_stream_name='dcv-connection-gateway_{ip_address}'
                )
            ]
        )

        controller_bootstrap_package_uri = None
        dcv_broker_package_uri = None
        dcv_connection_gateway_package_uri = None
        if render_bootstrap_package or upload_bootstrap_package:
            controller_bootstrap_package_uri = self.build_and_upload_bootstrap_package(
                bootstrap_context=controller_bootstrap_context,
                bootstrap_package_basename=f'bootstrap-{self.module_id}-controller-{self.deployment_id}',
                bootstrap_components=[
                    'virtual-desktop-controller'
                ],
                upload=upload_bootstrap_package,
                force_build=force_build_bootstrap
            )
            dcv_broker_package_uri = self.build_and_upload_bootstrap_package(
                bootstrap_context=broker_bootstrap_context,
                bootstrap_package_basename=f'bootstrap-{self.module_id}-dcv-broker-{self.deployment_id}',
                bootstrap_components=[
                    'dcv-broker'
                ],
                upload=upload_bootstrap_package,
                force_build=force_build_bootstrap
            )
            dcv_connection_gateway_package_uri = self.build_and_upload_bootstrap_package(
                bootstrap_context=dcv_connection_gateway_bootstrap_context,
                bootstrap_package_basename=f'bootstrap-{self.module_id}-dcv-connection-gateway-{self.deployment_id}',
                bootstrap_components=[
                    'dcv-connection-gateway'
                ],
                upload=upload_bootstrap_package,
                force_build=force_build_bootstrap
            )
            self.upload_vdi_install_scripts(
                cluster_config=cluster_config,
                upload=upload_bootstrap_package,
                force_build=force_build_bootstrap
            )

        if upload_release_package and upload_bootstrap_package and deploy_stack:
            outputs_file = os.path.join(self.deployment_dir, 'virtual-desktop-controller-outputs.json')
            cdk_app_cmd = self.get_cdk_app_cmd()
            cdk_cmd = self.get_cdk_command('deploy', params=[
                f"--app '{cdk_app_cmd}' ",
                f'--outputs-file {outputs_file} ',
                '--require-approval never'
            ], context_params={
                'controller_bootstrap_package_uri': controller_bootstrap_package_uri,
                'dcv_broker_bootstrap_package_uri': dcv_broker_package_uri,
                'dcv_connection_gateway_package_uri': dcv_connection_gateway_package_uri
            })
            self.exec_shell(cdk_cmd)