コード例 #1
0
def test_dynamic_placement_group_in_cluster(region, scheduler,
                                            pcluster_config_reader,
                                            clusters_factory, instance):
    """Test the case when placement_group is set to DYNAMIC. This test is not for awsbatch scheduler."""
    cluster_config = pcluster_config_reader(placement="cluster")
    cluster = clusters_factory(cluster_config)
    remote_command_executor = RemoteCommandExecutor(cluster)

    # For tratitional scheduler, the placement group name can be retrieved from main stack, for slurm, it can be
    # retrieved from ComputeFleetHITSubstack
    if scheduler == "slurm":
        placement_group = _get_slurm_placement_group_from_stack(
            cluster, region)
        # for slurm, the placement type can only be compute
        _check_head_node_placement_group(remote_command_executor, region, None)
    else:
        placement_group = utils.retrieve_cfn_resources(
            cluster.cfn_name, region)["DynamicPlacementGroup"]
        _check_head_node_placement_group(remote_command_executor, region,
                                         placement_group)
    # check the placement_group of compute nodes
    _assert_placement_group(cluster, scheduler, region, placement_group, None,
                            instance)

    # need to delete the cluster before deleting placement group
    cluster.delete()
コード例 #2
0
 def cfn_resources(self):
     """
     Return the CloudFormation stack resources for the cluster.
     Resources are retrieved only once and then cached.
     """
     if not self.__cfn_resources:
         self.__cfn_resources = retrieve_cfn_resources(self.cfn_name, self.region)
     return self.__cfn_resources
コード例 #3
0
 def cfn_resources(self):
     """
     Return the CloudFormation stack resources for the cluster.
     Resources are retrieved only once and then cached.
     """
     if not self.__cfn_resources:
         self.__cfn_resources = retrieve_cfn_resources(self.cfn_name, self.region)
     return self.__cfn_resources
コード例 #4
0
 def ebs_substack_cfn_resources(self):
     """
     Return the CloudFormation stack resources for the cluster's EBS substack.
     Resources are retrieved only once and then cached.
     """
     if not self.__ebs_substack_cfn_resources:
         self.__ebs_substack_cfn_resources = retrieve_cfn_resources(
             self.cfn_resources.get("EBSCfnStack"), self.region)
     return self.__ebs_substack_cfn_resources
コード例 #5
0
 def head_node_substack_cfn_resources(self):
     """
     Return the CloudFormation stack resources for the cluster's head node substack.
     Resources are retrieved only once and then cached.
     """
     if not self.__head_node_substack_cfn_resources:
         self.__head_node_substack_cfn_resources = retrieve_cfn_resources(
             self.cfn_resources.get("MasterServerSubstack"), self.region)
     return self.__head_node_substack_cfn_resources
コード例 #6
0
def _get_slurm_placement_group_from_stack(cluster, region):
    compute_fleet_substack = utils.get_substacks(
        cluster.cfn_name,
        region=region,
        sub_stack_name="ComputeFleetHITSubstack")[0]
    compute_fleet_substack_resources = utils.retrieve_cfn_resources(
        compute_fleet_substack, region)
    placement_group = next(
        v for k, v in compute_fleet_substack_resources.items()
        if k.startswith("PlacementGroup"))
    return placement_group
コード例 #7
0
def _get_slurm_placement_group_from_stack(cluster, region):
    stack_resources = utils.retrieve_cfn_resources(cluster.cfn_name, region)
    placement_group = next(v for k, v in stack_resources.items()
                           if k.startswith("ComputeFleetPlacementGroup"))
    return placement_group
コード例 #8
0
 def init_stack_data(self):
     """Initialize cfn_outputs and cfn_resources."""
     self.__cfn_outputs = retrieve_cfn_outputs(self.name, self.region)
     self.__cfn_resources = retrieve_cfn_resources(self.name, self.region)