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)