in cli/src/pcluster/templates/cluster_stack.py [0:0]
def _add_resources(self):
# Cloud Watch Logs
self.log_group = None
if self.config.is_cw_logging_enabled:
self.log_group = self._add_cluster_log_group()
self._add_iam_resources()
# Managed security groups
self._head_security_group, self._compute_security_group = self._add_security_groups()
# Head Node ENI
self._head_eni = self._add_head_eni()
# Additional Cfn Stack
if self.config.additional_resources:
CfnStack(self, "AdditionalCfnStack", template_url=self.config.additional_resources)
# Cleanup Resources Lambda Function
cleanup_lambda_role, cleanup_lambda = self._add_cleanup_resources_lambda()
if self.config.shared_storage:
for storage in self.config.shared_storage:
self._add_shared_storage(storage)
# Compute Fleet and scheduler related resources
self.scheduler_resources = None
if self._condition_is_slurm():
self.scheduler_resources = SlurmConstruct(
scope=self,
id="Slurm",
stack_name=self._stack_name,
cluster_config=self.config,
bucket=self.bucket,
managed_head_node_instance_role=self._managed_head_node_instance_role,
managed_compute_instance_roles=self._managed_compute_instance_roles,
cleanup_lambda_role=cleanup_lambda_role, # None if provided by the user
cleanup_lambda=cleanup_lambda,
)
self.compute_fleet_resources = None
if not self._condition_is_batch():
self.compute_fleet_resources = ComputeFleetConstruct(
scope=self,
id="ComputeFleet",
cluster_config=self.config,
log_group=self.log_group,
cleanup_lambda=cleanup_lambda,
cleanup_lambda_role=cleanup_lambda_role,
compute_security_group=self._compute_security_group,
shared_storage_mappings=self.shared_storage_mappings,
shared_storage_options=self.shared_storage_options,
shared_storage_attributes=self.shared_storage_attributes,
compute_node_instance_profiles=self._compute_instance_profiles,
cluster_hosted_zone=self.scheduler_resources.cluster_hosted_zone if self.scheduler_resources else None,
dynamodb_table=self.scheduler_resources.dynamodb_table if self.scheduler_resources else None,
head_eni=self._head_eni,
)
self._add_scheduler_plugin_substack()
# Wait condition
self.wait_condition, self.wait_condition_handle = self._add_wait_condition()
# Head Node
self.head_node_instance = self._add_head_node()
# AWS Batch related resources
if self._condition_is_batch():
self.scheduler_resources = AwsBatchConstruct(
scope=self,
id="AwsBatch",
stack_name=self._stack_name,
cluster_config=self.config,
bucket=self.bucket,
create_lambda_roles=self._condition_create_lambda_iam_role(),
compute_security_group=self._compute_security_group,
shared_storage_mappings=self.shared_storage_mappings,
shared_storage_options=self.shared_storage_options,
head_node_instance=self.head_node_instance,
managed_head_node_instance_role=self._managed_head_node_instance_role, # None if provided by the user
)
# CloudWatch Dashboard
if self.config.is_cw_dashboard_enabled:
self.cloudwatch_dashboard = CWDashboardConstruct(
scope=self,
id="PclusterDashboard",
stack_name=self.stack_name,
cluster_config=self.config,
head_node_instance=self.head_node_instance,
shared_storage_mappings=self.shared_storage_mappings,
cw_log_group_name=self.log_group.log_group_name if self.config.is_cw_logging_enabled else None,
)