in cli/src/pcluster/config/cluster_config.py [0:0]
def _register_validators(self, context: ValidatorContext = None): # noqa: D102 #pylint: disable=unused-argument
self._register_validator(RegionValidator, region=self.region)
self._register_validator(ClusterNameValidator, name=self.cluster_name, scheduling=self.scheduling)
self._register_validator(
ArchitectureOsValidator,
os=self.image.os,
architecture=self.head_node.architecture,
)
if self.head_node_ami:
self._register_validator(
InstanceTypeBaseAMICompatibleValidator,
instance_type=self.head_node.instance_type,
image=self.head_node_ami,
)
self._register_validator(
InstanceTypeOSCompatibleValidator,
instance_type=self.head_node.instance_type,
os=self.image.os,
)
if self.head_node.image and self.head_node.image.custom_ami:
self._register_validator(
AmiOsCompatibleValidator, os=self.image.os, image_id=self.head_node.image.custom_ami
)
self._register_storage_validators()
self._register_validator(
HeadNodeLaunchTemplateValidator,
head_node=self.head_node,
root_volume_device_name=AWSApi.instance().ec2.describe_image(self.head_node_ami).device_name,
ami_id=self.head_node_ami,
tags=self.get_tags(),
imds_support=self.imds.imds_support,
)
if self.head_node.dcv:
self._register_validator(FeatureRegionValidator, feature=Feature.DCV, region=self.region)
self._register_validator(
DcvValidator,
instance_type=self.head_node.instance_type,
dcv_enabled=self.head_node.dcv.enabled,
allowed_ips=self.head_node.dcv.allowed_ips,
port=self.head_node.dcv.port,
os=self.image.os,
architecture=self.head_node.architecture,
)
self._register_additional_package_validator()
if self.custom_s3_bucket:
self._register_validator(S3BucketValidator, bucket=self.custom_s3_bucket)
self._register_validator(S3BucketRegionValidator, bucket=self.custom_s3_bucket, region=self.region)
self._register_validator(SchedulerValidator, scheduler=self.scheduling.scheduler)
self._register_validator(SchedulerOsValidator, scheduler=self.scheduling.scheduler, os=self.image.os)
self._register_validator(
HeadNodeImdsValidator, imds_secured=self.head_node.imds.secured, scheduler=self.scheduling.scheduler
)
ami_volume_size = AWSApi.instance().ec2.describe_image(self.head_node_ami).volume_size
root_volume = self.head_node.local_storage.root_volume
root_volume_size = root_volume.size
if root_volume_size is None: # If root volume size is not specified, it will be the size of the AMI.
root_volume_size = ami_volume_size
self._register_validator(
RootVolumeSizeValidator,
root_volume_size=root_volume_size,
ami_volume_size=ami_volume_size,
)
self._register_validator(
EbsVolumeTypeSizeValidator, volume_type=root_volume.volume_type, volume_size=root_volume_size
)
self._register_validator(
EbsVolumeIopsValidator,
volume_type=root_volume.volume_type,
volume_size=root_volume_size,
volume_iops=root_volume.iops,
)
self._register_validator(KeyPairValidator, key_name=self.head_node.ssh.key_name, os=self.image.os)
if self.deployment_settings and self.deployment_settings.disable_sudo_access_default_user:
self._register_validator(
SchedulerDisableSudoAccessForDefaultUserValidator, scheduler=self.scheduling.scheduler
)