import ipaddress import json import os from pydantic import BaseSettings class GeneralParams(BaseSettings): public_hostname: str class InfoBloxParams(BaseSettings): scheme: str wapi_version: str host: str username: str password: str class V4NetworkParams(BaseSettings): containers: list[ipaddress.IPv4Network] networks: list[ipaddress.IPv4Network] mask: int # TODO: validation on mask? class V6NetworkParams(BaseSettings): containers: list[ipaddress.IPv6Network] networks: list[ipaddress.IPv6Network] mask: int # TODO: validation on mask? class ServiceNetworkParams(BaseSettings): V4: V4NetworkParams V6: V6NetworkParams domain_name: str dns_view: str class IPAMParams(BaseSettings): INFOBLOX: InfoBloxParams LO: ServiceNetworkParams TRUNK: ServiceNetworkParams GEANT_IP: ServiceNetworkParams class ProvisioningProxyParams(BaseSettings): scheme: str api_base: str auth: str # FIXME: unfinished api_version: int class OSSParams(BaseSettings): GENERAL: GeneralParams IPAM: IPAMParams RESOURCE_MANAGER_API_PREFIX: str # api prefix 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']) as f: return OSSParams(**json.loads(f.read())) if __name__ == '__main__': print(load_oss_params())