source/idea/batteries_included/stack.py (185 lines of code) (raw):
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
from aws_cdk import CfnStack, Stack
from aws_cdk import aws_secretsmanager as secretsmanager
from aws_cdk import aws_ssm
from constructs import Construct
from idea.batteries_included.parameters.parameters import BIParameters
class BiStack(Stack):
def __init__(
self,
scope: Construct,
stack_id: str,
template_url: str,
parameters: BIParameters = BIParameters(),
) -> None:
super().__init__(scope, stack_id)
self.bi_stack = CfnStack(
self,
"RESExternal",
parameters={
"PortalDomainName": str(parameters.portal_domain_name),
"Keypair": str(parameters.ssh_key_pair_name),
"EnvironmentName": str(parameters.cluster_name),
"AdminPassword": str(parameters.service_account_password),
"ServiceAccountPassword": str(parameters.service_account_password),
"ClientIpCidr": str(parameters.client_ip),
"ClientPrefixList": str(parameters.client_prefix_list),
"RetainStorageResources": str(parameters.retain_storage_resources),
},
template_url=template_url,
)
self.vpc_id = aws_ssm.StringParameter(
self,
id=str(parameters.vpc_id),
parameter_name=str(parameters.vpc_id),
string_value=self.bi_stack.get_att("Outputs.VpcId").to_string(),
)
self.vpc_id.node.add_dependency(self.bi_stack)
self.load_balancer_subnets = aws_ssm.StringListParameter(
self,
id=str(parameters.load_balancer_subnets),
parameter_name=str(parameters.load_balancer_subnets),
string_list_value=self.bi_stack.get_att("Outputs.PublicSubnets")
.to_string()
.split(","),
)
self.load_balancer_subnets.node.add_dependency(self.bi_stack)
self.infrastructure_host_subnets = aws_ssm.StringListParameter(
self,
id=str(parameters.infrastructure_host_subnets),
parameter_name=str(parameters.infrastructure_host_subnets),
string_list_value=self.bi_stack.get_att("Outputs.PrivateSubnets")
.to_string()
.split(","),
)
self.infrastructure_host_subnets.node.add_dependency(self.bi_stack)
self.vdi_subnets = aws_ssm.StringListParameter(
self,
id=str(parameters.vdi_subnets),
parameter_name=str(parameters.vdi_subnets),
string_list_value=self.bi_stack.get_att("Outputs.PrivateSubnets")
.to_string()
.split(","),
)
self.vdi_subnets.node.add_dependency(self.bi_stack)
self.active_directory_name = aws_ssm.StringParameter(
self,
id=str(parameters.name),
parameter_name=str(parameters.name),
string_value=self.bi_stack.get_att(
"Outputs.ActiveDirectoryName"
).to_string(),
)
self.active_directory_name.node.add_dependency(self.bi_stack)
self.ad_short_name = aws_ssm.StringParameter(
self,
id=str(parameters.ad_short_name),
parameter_name=str(parameters.ad_short_name),
string_value=self.bi_stack.get_att("Outputs.ADShortName").to_string(),
)
self.ad_short_name.node.add_dependency(self.bi_stack)
self.ldap_base = aws_ssm.StringParameter(
self,
id=str(parameters.ldap_base),
parameter_name=str(parameters.ldap_base),
string_value=self.bi_stack.get_att("Outputs.LDAPBase").to_string(),
)
self.ldap_base.node.add_dependency(self.bi_stack)
self.ldap_connection_uri = aws_ssm.StringParameter(
self,
id=str(parameters.ldap_connection_uri),
parameter_name=str(parameters.ldap_connection_uri),
string_value=self.bi_stack.get_att("Outputs.LDAPConnectionURI").to_string(),
)
self.ldap_connection_uri.node.add_dependency(self.bi_stack)
self.acm_certificate_arn_for_web_ui = aws_ssm.StringParameter(
self,
id=str(parameters.acm_certificate_arn_for_web_ui),
parameter_name=str(parameters.acm_certificate_arn_for_web_ui),
string_value=(
self.bi_stack.get_att("Outputs.ACMCertificateARNforWebApp").to_string()
if parameters.portal_domain_name
else '""'
),
)
self.acm_certificate_arn_for_web_ui.node.add_dependency(self.bi_stack)
self.private_key_secret_arn_for_vdi_domain_name = aws_ssm.StringParameter(
self,
id=str(parameters.private_key_secret_arn_for_vdi_domain_name),
parameter_name=str(parameters.private_key_secret_arn_for_vdi_domain_name),
string_value=(
self.bi_stack.get_att("Outputs.PrivateKeySecretArn").to_string()
if parameters.portal_domain_name
else '""'
),
)
self.private_key_secret_arn_for_vdi_domain_name.node.add_dependency(
self.bi_stack
)
self.certificate_secret_arn_for_vdi_domain_name = aws_ssm.StringParameter(
self,
id=str(parameters.certificate_secret_arn_for_vdi_domain_name),
parameter_name=str(parameters.certificate_secret_arn_for_vdi_domain_name),
string_value=(
self.bi_stack.get_att("Outputs.CertificateSecretArn").to_string()
if parameters.portal_domain_name
else '""'
),
)
self.certificate_secret_arn_for_vdi_domain_name.node.add_dependency(
self.bi_stack
)
self.service_account_credentials_secret_arn = aws_ssm.StringParameter(
self,
id=str(parameters.service_account_credentials_secret_arn),
parameter_name=str(parameters.service_account_credentials_secret_arn),
string_value=self.bi_stack.get_att(
"Outputs.ServiceAccountCredentialsSecretArn"
).to_string(),
)
self.service_account_credentials_secret_arn.node.add_dependency(self.bi_stack)
self.root_user_dn = aws_ssm.StringParameter(
self,
id=str(parameters.root_user_dn),
parameter_name=str(parameters.root_user_dn),
string_value=self.bi_stack.get_att(
"Outputs.ServiceAccountUserDN"
).to_string(),
)
self.root_user_dn.node.add_dependency(self.bi_stack)
self.users_ou = aws_ssm.StringParameter(
self,
id=str(parameters.users_ou),
parameter_name=str(parameters.users_ou),
string_value=self.bi_stack.get_att("Outputs.UsersOU").to_string(),
)
self.users_ou.node.add_dependency(self.bi_stack)
self.groups_ou = aws_ssm.StringParameter(
self,
id=str(parameters.groups_ou),
parameter_name=str(parameters.groups_ou),
string_value=self.bi_stack.get_att("Outputs.GroupsOU").to_string(),
)
self.groups_ou.node.add_dependency(self.bi_stack)
self.sudoers_group_name = aws_ssm.StringParameter(
self,
id=str(parameters.sudoers_group_name),
parameter_name=str(parameters.sudoers_group_name),
string_value="RESAdministrators",
)
self.sudoers_group_name.node.add_dependency(self.bi_stack)
self.computers_ou = aws_ssm.StringParameter(
self,
id=str(parameters.computers_ou),
parameter_name=str(parameters.computers_ou),
string_value=self.bi_stack.get_att("Outputs.ComputersOU").to_string(),
)
self.computers_ou.node.add_dependency(self.bi_stack)
self.existing_home_fs_id = aws_ssm.StringParameter(
self,
id=str(parameters.existing_home_fs_id),
parameter_name=str(parameters.existing_home_fs_id),
string_value=self.bi_stack.get_att(
"Outputs.SharedHomeFilesystemId"
).to_string(),
)
self.existing_home_fs_id.node.add_dependency(self.bi_stack)