Merging upstream version 0.12.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
f45bc3d463
commit
8d2f70e3c7
77 changed files with 23610 additions and 2331 deletions
140
eos_downloader/models/data.py
Normal file
140
eos_downloader/models/data.py
Normal file
|
@ -0,0 +1,140 @@
|
|||
# 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()
|
Loading…
Add table
Add a link
Reference in a new issue