140 lines
4.8 KiB
Python
140 lines
4.8 KiB
Python
# coding: utf-8 -*-
|
|
"""This module defines data models and mappings for image types of CloudVision and EOS on Arista.com.
|
|
|
|
Classes
|
|
-------
|
|
ImageInfo:
|
|
A Pydantic model representing image information for a specific image type.
|
|
DataMapping:
|
|
A Pydantic model representing data mapping for image types of CloudVision and EOS on Arista.com.
|
|
|
|
Methods
|
|
-------
|
|
DataMapping.filename(software: AristaMapping, image_type: str, version: str) -> str:
|
|
Generates a filename based on the provided software, image type, and version.
|
|
|
|
Constants
|
|
-------
|
|
- RTYPE_FEATURE (ReleaseType): Represents a feature release type.
|
|
- RTYPE_MAINTENANCE (ReleaseType): Represents a maintenance release type.
|
|
- RTYPES (List[ReleaseType]): A list containing the feature and maintenance release types.
|
|
|
|
Variables
|
|
-------
|
|
- software_mapping (DataMapping): An instance of DataMapping containing the mappings for CloudVision and EOS image types.
|
|
"""
|
|
|
|
from typing import Dict, List
|
|
|
|
from pydantic import BaseModel
|
|
|
|
from eos_downloader.models.types import AristaMapping, ReleaseType
|
|
|
|
|
|
RTYPE_FEATURE: ReleaseType = "F"
|
|
RTYPE_MAINTENANCE: ReleaseType = "M"
|
|
RTYPES: List[ReleaseType] = [RTYPE_FEATURE, RTYPE_MAINTENANCE]
|
|
|
|
|
|
class ImageInfo(BaseModel):
|
|
"""Image information for a specific image type.
|
|
|
|
Attributes
|
|
----------
|
|
extension : str
|
|
The file extension for the image type.
|
|
prepend : str
|
|
The prefix to prepend to the filename.
|
|
"""
|
|
|
|
extension: str
|
|
prepend: str
|
|
|
|
|
|
class DataMapping(BaseModel):
|
|
"""Data mapping for image types of CloudVision and EOS on Arista.com.
|
|
|
|
Attributes
|
|
----------
|
|
CloudVision : Dict[str, ImageInfo]
|
|
Mapping of image types to their information for CloudVision.
|
|
EOS : Dict[str, ImageInfo]
|
|
Mapping of image types to their information for EOS.
|
|
|
|
Methods
|
|
-------
|
|
filename(software: AristaMapping, image_type: str, version: str) -> str
|
|
Generates a filename based on the provided software, image type, and version.
|
|
"""
|
|
|
|
CloudVision: Dict[str, ImageInfo]
|
|
EOS: Dict[str, ImageInfo]
|
|
|
|
def filename(self, software: AristaMapping, image_type: str, version: str) -> str:
|
|
"""Generates a filename based on the provided software, image type, and version.
|
|
|
|
Parameters
|
|
----------
|
|
software : AristaMapping
|
|
The name of the software for which the filename is being generated.
|
|
image_type : str
|
|
The type of image for which the filename is being generated.
|
|
version : str
|
|
The version of the software or image.
|
|
|
|
Returns
|
|
-------
|
|
str
|
|
The generated filename.
|
|
|
|
Raises
|
|
------
|
|
ValueError
|
|
If the software does not have a corresponding mapping.
|
|
ValueError
|
|
If no configuration is found for the given image type and no default configuration is available.
|
|
"""
|
|
|
|
if hasattr(self, software):
|
|
soft_mapping = getattr(self, software)
|
|
image_config = soft_mapping.get(image_type, None)
|
|
if image_config is None:
|
|
image_config = getattr(soft_mapping, "default", None)
|
|
if image_config is None:
|
|
raise ValueError(
|
|
f"No default configuration found for image type {image_type}"
|
|
)
|
|
if image_config is not None:
|
|
return f"{image_config.prepend}-{version}{image_config.extension}"
|
|
raise ValueError(f"No configuration found for image type {image_type}")
|
|
raise ValueError(f"Incorrect value for software {software}")
|
|
|
|
|
|
# Data mapping for image types of CloudVision and EOS on Arista.com.
|
|
software_mapping = DataMapping(
|
|
CloudVision={
|
|
"ova": {"extension": ".ova", "prepend": "cvp"},
|
|
"rpm": {"extension": "", "prepend": "cvp-rpm-installer"},
|
|
"kvm": {"extension": "-kvm.tgz", "prepend": "cvp"},
|
|
"upgrade": {"extension": ".tgz", "prepend": "cvp-upgrade"},
|
|
},
|
|
EOS={
|
|
"64": {"extension": ".swi", "prepend": "EOS64"},
|
|
"INT": {"extension": "-INT.swi", "prepend": "EOS"},
|
|
"2GB-INT": {"extension": "-INT.swi", "prepend": "EOS-2GB"},
|
|
"cEOS": {"extension": ".tar.xz", "prepend": "cEOS-lab"},
|
|
"cEOS64": {"extension": ".tar.xz", "prepend": "cEOS64-lab"},
|
|
"vEOS": {"extension": ".vmdk", "prepend": "vEOS"},
|
|
"vEOS-lab": {"extension": ".vmdk", "prepend": "vEOS-lab"},
|
|
"EOS-2GB": {"extension": ".swi", "prepend": "EOS-2GB"},
|
|
"RN": {"extension": "-", "prepend": "RN"},
|
|
"SOURCE": {"extension": "-source.tar", "prepend": "EOS"},
|
|
"default": {"extension": ".swi", "prepend": "EOS"},
|
|
},
|
|
)
|
|
|
|
# List of supported format for EOS software packages
|
|
eos_package_format = software_mapping.EOS.keys()
|
|
|
|
# List of supported format for CloudVision software packages
|
|
cvp_package_format = software_mapping.EOS.keys()
|