in syndicate/core/build/validator/batch_compenv_validator.py [0:0]
def _validate_compute_resources(compute_resources):
"""
Performs check of Batch Compute Environment compute resources.
:param compute_resources: compute resources definition
:raises AssertionError in case of invalidity.
:return: None
"""
compute_resource_type = compute_resources.get('type')
compute_resource_config = [
{
'field_name': 'compute_resource_type',
'field_value': compute_resource_type,
'field_options': COMPUTE_RESOURCE_TYPES,
'required': True,
'validators': [
_validate_options_field
]
},
{
'field_name': 'allocation_strategy',
'field_value': compute_resources.get('allocation_strategy'),
'field_options': ALLOCATION_STRATEGIES,
'compute_resource_type': compute_resource_type,
'required': False,
'validators': [
_validate_options_field,
_validate_fargate_forbidden_field
]
},
{
'field_name': 'min_vcpus',
'field_value': compute_resources.get('minv_cpus'),
'compute_resource_type': compute_resource_type,
'required_type': int,
'validators': [
_validate_field_type,
_validate_fargate_forbidden_field
]
},
{
'field_name': 'maxv_cpus',
'field_value': compute_resources.get('maxv_cpus'),
'compute_resource_type': compute_resource_type,
'required_type': int,
'validators': [
_validate_required_field,
_validate_field_type,
]
},
{
'field_name': 'desiredv_cpus',
'field_value': compute_resources.get('desiredv_cpus'),
'compute_resource_type': compute_resource_type,
'required_type': int,
'validators': [
_validate_field_type,
_validate_fargate_forbidden_field
]
},
{
'field_name': 'instance_types',
'field_value': compute_resources.get('instance_types'),
'compute_resource_type': compute_resource_type,
'required_type': list,
'validators': [
_validate_field_type,
_validate_fargate_forbidden_field,
]
},
{
'field_name': 'image_id',
'field_value': compute_resources.get('image_id'),
'compute_resource_type': compute_resource_type,
'required_type': str,
'validators': [
_validate_field_type,
_validate_fargate_forbidden_field
]
},
{
'field_name': 'subnets',
'field_value': compute_resources.get('subnets'),
'required_type': list,
'validators': [
_validate_required_field,
_validate_field_type,
]
},
{
'field_name': 'security_group_ids',
'field_value': compute_resources.get('security_group_ids'),
'required_type': list,
'validators': [
_validate_field_type,
]
},
{
'field_name': 'ec2_key_pair',
'field_value': compute_resources.get('ec2_key_pair'),
'required_type': str,
'compute_resource_type': compute_resource_type,
'validators': [
_validate_field_type,
_validate_fargate_forbidden_field
]
},
{
'field_name': 'instance_role',
'field_value': compute_resources.get('instance_role'),
'required_type': str,
'compute_resource_type': compute_resource_type,
'validators': [
_validate_field_type,
_validate_fargate_forbidden_field
]
},
{
'field_name': 'tags',
'field_value': compute_resources.get('tags'),
'required_type': dict,
'compute_resource_type': compute_resource_type,
'validators': [
_validate_field_type,
_validate_fargate_forbidden_field
]
},
{
'field_name': 'placement_group',
'field_value': compute_resources.get('placement_group'),
'required_type': str,
'compute_resource_type': compute_resource_type,
'validators': [
_validate_field_type,
_validate_fargate_forbidden_field
]
},
{
'field_name': 'bid_percentage',
'field_value': compute_resources.get('bid_percentage'),
'required_type': int,
'compute_resource_type': compute_resource_type,
'validators': [
_validate_field_type,
_validate_fargate_forbidden_field
]
},
{
'field_name': 'spot_iam_fleet_role',
'field_value': compute_resources.get('spot_iam_fleet_role'),
'required_type': str,
'compute_resource_type': compute_resource_type,
'validators': [
_validate_field_type,
_validate_fargate_forbidden_field
]
},
{
'field_name': 'launch_template',
'field_value': compute_resources.get('launch_template'),
'required_type': dict,
'compute_resource_type': compute_resource_type,
'validators': [
_validate_field_type,
_validate_fargate_forbidden_field
]
},
{
'field_name': 'ec2_configuration',
'field_value': compute_resources.get('ec2_configuration'),
'required_type': list,
'validators': [
_validate_field_type,
]
},
]
_process_config(compute_resource_config)
instance_types = compute_resources.get('instance_types') or []
# available = set(InstanceTypes.with_groups(
# InstanceTypes.from_api(region_name=CONFIG.region)
# ))
available = set(InstanceTypes.with_groups(InstanceTypes.from_botocore()))
available.add(OPTIMAL_INSTANCE_TYPE)
for instance_type in instance_types:
_validate_options_field(
field_name='instance_types__item',
field_value=instance_type,
field_options=available
)
desiredv_cpus = compute_resources.get('desiredv_cpus')
if desiredv_cpus:
minv_cpus = compute_resources.get('minv_cpus')
maxv_cpus = compute_resources.get('maxv_cpus')
if desiredv_cpus > maxv_cpus:
raise AssertionError(
'compute_resources__desired_vcpus must be smaller or equal than max_vcpus.'
)
if minv_cpus and desiredv_cpus < minv_cpus:
raise AssertionError(
'compute_resources__desired_vcpus must be greater or equal than min_vcpus.'
)
security_group_ids = compute_resources.get('security_group_ids')
if not security_group_ids and compute_resource_type in FARGATE_RESOURCE_TYPES:
raise AssertionError(
"compute_resources__security_group_ids is required for jobs running on Fargate resources"
)
launch_template = compute_resources.get('launch_template')
if launch_template:
launch_template_id = launch_template.get('launch_template_id')
_validate_field_type(
field_name='launch_template_id',
field_value=launch_template_id,
prefix='compute_resources__launch_template',
required_type=str
)
launch_template_name = launch_template.get('launch_template_name')
_validate_field_type(
field_name='launch_template_name',
field_value=launch_template_name,
prefix='compute_resources__launch_template',
required_type=str
)
launch_template_options = (launch_template_id, launch_template_name)
if all(launch_template_options) or not any(launch_template_options):
raise AssertionError(
"You must specify either the 'launch_template_id' or 'launch_template_name', but not both."
)