Skip to content
Snippets Groups Projects
settings.py 2.48 KiB
Newer Older

Ensuring that the required parameters are set correctly.
"""

import ipaddress
import json
import logging
import os
from pydantic import BaseSettings
logger = logging.getLogger(__name__)

class GeneralParams(BaseSettings):
    """General parameters for a {term}`GSO` configuration file."""
    """The hostname that {term}`GSO` is publicly served at, used for building the callback URL that the provisioning
    proxy uses."""
class InfoBloxParams(BaseSettings):
    """Parameters related to InfoBlox."""
    scheme: str
    wapi_version: str
    host: str
    username: str
    password: str


class V4NetworkParams(BaseSettings):
    """A set of parameters that describe an IPv4 network in InfoBlox."""
    containers: list[ipaddress.IPv4Network]
    mask: int  # TODO: validation on mask?


class V6NetworkParams(BaseSettings):
    """A set of parameters that describe an IPv6 network in InfoBlox."""
    containers: list[ipaddress.IPv6Network]
    mask: int  # TODO: validation on mask?


class ServiceNetworkParams(BaseSettings):
    """Parameters for InfoBlox.

    The parameters describe IPv4 and v6 networks, and the corresponding domain name that should be used as a suffix.
    V4: V4NetworkParams
    V6: V6NetworkParams


class IPAMParams(BaseSettings):
    """A set of parameters related to {term}`IPAM`."""
    INFOBLOX: InfoBloxParams
    TRUNK: ServiceNetworkParams
    GEANT_IP: ServiceNetworkParams
    SI: ServiceNetworkParams
    LT_IAS: ServiceNetworkParams
class ProvisioningProxyParams(BaseSettings):
    """Parameters for the provisioning proxy."""
    auth: str  # FIXME: unfinished
    api_version: int


class NetBoxParams(BaseSettings):
    """Parameters for NetBox."""
class OSSParams(BaseSettings):
    """The set of parameters required for running {term}`GSO`."""
    IPAM: IPAMParams
    PROVISIONING_PROXY: ProvisioningProxyParams


def load_oss_params() -> OSSParams:
    """Look for OSS_PARAMS_FILENAME in the environment and load the parameters from that file."""
    with open(os.environ["OSS_PARAMS_FILENAME"], encoding="utf-8") as file:
        return OSSParams(**json.loads(file.read()))
if __name__ == "__main__":
    logger.debug(load_oss_params())