1
0
mirror of https://github.com/checktheroads/hyperglass synced 2024-05-11 05:55:08 +00:00

67 lines
1.7 KiB
Python
Raw Normal View History

"""
Defines models for VRF config variables.
Imports config variables and overrides default class attributes.
Validates input for overridden parameters.
"""
# Standard Library Imports
from typing import List
# Third Party Imports
from pydantic import BaseSettings
# Project Imports
from hyperglass.configuration.models._utils import clean_name
class Vrf(BaseSettings):
"""Model for per VRF/afi config in devices.yaml"""
display_name: str
name: str
afis: List[str]
class Vrfs(BaseSettings):
"""Base model for vrfs class"""
@classmethod
def import_params(cls, input_params):
"""
Imports passed dict from YAML config, removes unsupported
characters from VRF names, dynamically sets attributes for
the Vrfs class.
"""
vrfs: Vrf = {
"default": {
"display_name": "Default",
"name": "default",
"afis": ["ipv4, ipv6"],
}
}
names: List[str] = ["default"]
_all: List[str] = ["default"]
for (vrf_key, params) in input_params.items():
vrf = clean_name(vrf_key)
vrf_params = Vrf(**params)
vrfs.update({vrf: vrf_params.dict()})
names.append(params.get("name"))
_all.append(vrf_key)
for (vrf_key, params) in vrfs.items():
setattr(Vrfs, vrf_key, params)
names: List[str] = list(set(names))
_all: List[str] = list(set(_all))
Vrfs.vrfs = vrfs
Vrfs.names = names
Vrfs._all = _all
return Vrfs()
class Config:
"""Pydantic Config"""
validate_all = True
validate_assignment = True