141 lines
4.8 KiB
Python
141 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()
|