in source/idea/infrastructure/resources/lambda_functions/custom_resource/ddb_default_values_populator_lambda/handler.py [0:0]
def _load_base_software_stacks() -> Optional[List[Dict[str, Any]]]:
with open(BASE_SOFTWARE_STACK_CONFIG_PATH, "r") as f:
base_stacks_config = yaml.safe_load(f)
if not base_stacks_config:
logger.error(f"{BASE_SOFTWARE_STACK_CONFIG_PATH} is empty. Returning")
return None
base_software_stacks = []
for base_os in software_stacks.BASE_OS:
logger.info(f"Processing base_os: {base_os}")
os_config = base_stacks_config.get(base_os)
for arch in software_stacks.ARCHITECTURE:
arch_key = _reformat_key(arch)
logger.info(f"Processing architecture: {arch_key} with base_os: {base_os}")
arch_config = os_config.get(arch_key)
if not arch_config:
logger.error(
f"Entry for architecture: {arch_key} within base_os: {base_os}. NOT FOUND. Returning"
)
continue
default_name = arch_config.get("default-name")
default_description = arch_config.get("default-description")
default_min_storage_value = arch_config.get("default-min-storage-value")
default_min_storage_unit = arch_config.get("default-min-storage-unit")
default_min_ram_value = arch_config.get("default-min-ram-value")
default_min_ram_unit = arch_config.get("default-min-ram-unit")
default_tenancy = arch_config.get("default-tenancy")
default_allowed_instance_types = arch_config.get(
"default-allowed-instance-types"
)
if (
not default_name
or not default_description
or not default_min_storage_value
or not default_min_storage_unit
or not default_min_ram_value
or not default_min_ram_unit
or not default_tenancy
or not default_allowed_instance_types
):
error_message = (
f"Invalid base-software-stack-config.yaml configuration for OS: {base_os} Arch Config: "
f"{arch}. Missing default-name and/or default-description and/or default-min-storage-value "
f"and/or default-min-storage-unit and/or default-min-ram-value and/or default-min-ram-unit "
f"and/or default-allowed-instance-types"
)
logger.error(error_message)
raise Exception(error_message)
aws_region = os.environ.get("AWS_DEFAULT_REGION")
logger.info(
f"Processing arch: {arch_key} within base_os: {base_os} "
f"for aws_region: {aws_region}"
)
region_configs = arch_config.get(aws_region)
if not region_configs:
logger.error(
f"Entry for arch: {arch_key} within base_os: {base_os}. "
f"for aws_region: {aws_region} "
f"NOT FOUND. Returning"
)
continue
for region_config in region_configs:
ami_id = region_config.get("ami-id")
if not ami_id:
error_message = (
f"Invalid base-software-stack-config.yaml configuration for OS: {base_os} Arch"
f" Config: {arch} AWS-Region: {aws_region}."
f" Missing ami-id"
)
logger.error(error_message)
raise Exception(error_message)
ss_id_suffix = region_config.get("ss-id-suffix")
if not ss_id_suffix:
error_message = (
f"Invalid base-software-stack-config.yaml configuration for OS: {base_os} Arch"
f" Config: {arch} AWS-Region: {aws_region}."
f" Missing ss-id-suffix"
)
logger.error(error_message)
raise Exception(error_message)
gpu_manufacturer = region_config.get("gpu-manufacturer")
if gpu_manufacturer and gpu_manufacturer not in {
"AMD",
"NVIDIA",
"NO_GPU",
}:
error_message = (
f"Invalid base-software-stack-config.yaml configuration for OS: {base_os} Arch"
f" Config: {arch} AWS-Region: {aws_region}."
f" Invalid gpu-manufacturer {gpu_manufacturer} can be one of AMD, NVIDIA, NO_GPU only"
)
logger.error(error_message)
raise Exception(error_message)
elif not gpu_manufacturer:
gpu_manufacturer = "NO_GPU"
custom_stack_name = region_config.get(
software_stacks.SOFTWARE_STACK_DB_NAME_KEY, default_name
)
custom_stack_description = region_config.get(
software_stacks.SOFTWARE_STACK_DB_DESCRIPTION_KEY,
default_description,
)
custom_stack_min_storage_value = region_config.get(
_reformat_key(
software_stacks.SOFTWARE_STACK_DB_MIN_STORAGE_VALUE_KEY
),
default_min_storage_value,
)
custom_stack_min_storage_unit = region_config.get(
_reformat_key(
software_stacks.SOFTWARE_STACK_DB_MIN_STORAGE_UNIT_KEY
),
default_min_storage_unit,
)
custom_stack_min_ram_value = region_config.get(
_reformat_key(software_stacks.SOFTWARE_STACK_DB_MIN_RAM_VALUE_KEY),
default_min_ram_value,
)
custom_stack_min_ram_unit = region_config.get(
_reformat_key(software_stacks.SOFTWARE_STACK_DB_MIN_RAM_UNIT_KEY),
default_min_ram_unit,
)
custom_allowed_instance_types = region_config.get(
_reformat_key(
software_stacks.SOFTWARE_STACK_DB_ALLOWED_INSTANCE_TYPES_KEY
),
default_allowed_instance_types,
)
custom_stack_gpu_manufacturer = gpu_manufacturer
custom_stack_tenancy = region_config.get(
_reformat_key(software_stacks.SOFTWARE_STACK_DB_TENANCY_KEY),
default_tenancy,
)
software_stack_id = f"{software_stacks.BASE_STACK_PREFIX}-{base_os}-{arch_key}-{ss_id_suffix}"
base_software_stacks.append(
{
software_stacks.SOFTWARE_STACK_DB_HASH_KEY: base_os,
software_stacks.SOFTWARE_STACK_DB_RANGE_KEY: software_stack_id,
software_stacks.SOFTWARE_STACK_DB_NAME_KEY: custom_stack_name,
software_stacks.SOFTWARE_STACK_DB_DESCRIPTION_KEY: custom_stack_description,
software_stacks.SOFTWARE_STACK_DB_AMI_ID_KEY: ami_id,
software_stacks.SOFTWARE_STACK_DB_ENABLED_KEY: True,
software_stacks.SOFTWARE_STACK_DB_MIN_STORAGE_VALUE_KEY: custom_stack_min_storage_value,
software_stacks.SOFTWARE_STACK_DB_MIN_STORAGE_UNIT_KEY: custom_stack_min_storage_unit,
software_stacks.SOFTWARE_STACK_DB_MIN_RAM_VALUE_KEY: custom_stack_min_ram_value,
software_stacks.SOFTWARE_STACK_DB_MIN_RAM_UNIT_KEY: custom_stack_min_ram_unit,
software_stacks.SOFTWARE_STACK_DB_ARCHITECTURE_KEY: arch,
software_stacks.SOFTWARE_STACK_DB_GPU_KEY: custom_stack_gpu_manufacturer,
software_stacks.SOFTWARE_STACK_DB_TENANCY_KEY: custom_stack_tenancy,
software_stacks.SOFTWARE_STACK_DB_ALLOWED_INSTANCE_TYPES_KEY: custom_allowed_instance_types,
software_stacks.SOFTWARE_STACK_DB_PROJECTS_KEY: [],
}
)
return base_software_stacks