Skip to content
Snippets Groups Projects
settings.py 2.37 KiB
Newer Older
"""
GSO settings, ensuring that the required parameters are set correctly.
"""
import ipaddress
import json
import os
from pydantic import BaseSettings, Field
class GeneralParams(BaseSettings):
    """
    General parameters for a GSO configuration file.
    """
    #: The hostname that 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 that 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 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 OSSParams(BaseSettings):
    """
    The set of parameters required for running GSO.
    """
    IPAM: IPAMParams
    RESOURCE_MANAGER_API_PREFIX: str
    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__':
Erik Reid's avatar
Erik Reid committed
    print(load_oss_params())