import ipaddress from typing import Union from pydantic import BaseSettings from gso.services import _ipam class V4ServiceNetwork(BaseSettings): v4: ipaddress.IPv4Network class V6ServiceNetwork(BaseSettings): v6: ipaddress.IPv6Network class ServiceNetworks(BaseSettings): v4: ipaddress.IPv4Network v6: ipaddress.IPv6Network class V4HostAddress(BaseSettings): v4: ipaddress.IPv4Address class V6HostAddress(BaseSettings): v6: ipaddress.IPv6Address class HostAddresses(BaseSettings): v4: ipaddress.IPv4Address v6: ipaddress.IPv6Address def new_service_networks(service_type="", comment="", extattrs={}) -> ServiceNetworks: v4_service_network = _ipam.allocate_service_ipv4_network( service_type=service_type, comment=comment, extattrs=extattrs ) v6_service_network = _ipam.allocate_service_ipv6_network( service_type=service_type, comment=comment, extattrs=extattrs ) return ServiceNetworks(v4=v4_service_network.v4, v6=v6_service_network.v6) def new_service_host( hostname, service_type="", service_networks: ServiceNetworks = None, host_addresses: HostAddresses = None, cname_aliases=None, extattrs={}, ) -> HostAddresses: return _ipam.allocate_service_host( hostname=hostname, service_type=service_type, service_networks=service_networks, host_addresses=host_addresses, cname_aliases=cname_aliases, extattrs=extattrs, ) def delete_service_network( network: ipaddress.ip_network = None, service_type="" ) -> Union[V4ServiceNetwork, V6ServiceNetwork]: return _ipam.delete_service_network(ipnetwork=network, service_type=service_type) def delete_service_host( hostname="", host_addresses: HostAddresses = None, cname_aliases=[], service_type="" ) -> HostAddresses: return _ipam.delete_service_host( hostname=hostname, host_addresses=host_addresses, cname_aliases=cname_aliases, service_type=service_type )