diff --git a/hyperglass/configuration/__init__.py b/hyperglass/configuration/__init__.py index 8e411bd..b8e826f 100644 --- a/hyperglass/configuration/__init__.py +++ b/hyperglass/configuration/__init__.py @@ -65,6 +65,7 @@ try: devices = models.Routers.import_params(user_devices["router"]) credentials = models.Credentials.import_params(user_devices["credential"]) proxies = models.Proxies.import_params(user_devices["proxy"]) + networks = models.Networks.import_params(user_devices["network"]) except ValidationError as validation_errors: errors = validation_errors.errors() for error in errors: diff --git a/hyperglass/configuration/models.py b/hyperglass/configuration/models.py index ab8fa51..26627a5 100644 --- a/hyperglass/configuration/models.py +++ b/hyperglass/configuration/models.py @@ -132,7 +132,35 @@ class Routers(BaseSettings): class Config: """Pydantic Config""" - # pylint: disable=too-few-public-methods + validate_all = True + validate_assignment = True + + +class Network(BaseSettings): + """Model for per-network/asn config in devices.yaml""" + + asn: int + display_name: str + + +class Networks(BaseSettings): + """Base model for networks class""" + + @classmethod + def import_params(cls, input_params): + """ + Imports passed dict from YAML config, removes unsupported + characters from device names, dynamically sets attributes for + the credentials class. + """ + obj = Networks() + for (netname, params) in input_params.items(): + netname = clean_name(netname) + setattr(Networks, netname, Network(**params)) + return obj + + class Config: + """Pydantic Config""" validate_all = True validate_assignment = True @@ -164,8 +192,6 @@ class Credentials(BaseSettings): class Config: """Pydantic Config""" - # pylint: disable=too-few-public-methods - validate_all = True validate_assignment = True @@ -207,8 +233,6 @@ class Proxies(BaseSettings): class Config: """Pydantic Config""" - # pylint: disable=too-few-public-methods - validate_all = True validate_assignment = True @@ -489,7 +513,6 @@ class Params(BaseSettings): class Config: """Pydantic Config""" - # pylint: disable=too-few-public-methods validate_all = True validate_assignment = True @@ -636,7 +659,5 @@ class Commands(BaseSettings): class Config: """Pydantic Config""" - # pylint: disable=too-few-public-methods - validate_all = False validate_assignment = True