Skip to content
Snippets Groups Projects
ipam.py 1.95 KiB
Newer Older
Erik Reid's avatar
Erik Reid committed
import ipaddress
from typing import Union
from pydantic import BaseSettings

from gso.services import _ipam
Erik Reid's avatar
Erik Reid committed

class V4ServiceNetwork(BaseSettings):
Erik Reid's avatar
Erik Reid committed
    v4: ipaddress.IPv4Network


class V6ServiceNetwork(BaseSettings):
Erik Reid's avatar
Erik Reid committed
    v6: ipaddress.IPv6Network


class ServiceNetworks(BaseSettings):
    v4: ipaddress.IPv4Network
    v6: ipaddress.IPv6Network


class V4HostAddress(BaseSettings):
Erik Reid's avatar
Erik Reid committed
    v4: ipaddress.IPv4Address


class V6HostAddress(BaseSettings):


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,
    )
    network: ipaddress.ip_network = None, service_type=""
) -> Union[V4ServiceNetwork, V6ServiceNetwork]:
    return _ipam.delete_service_network(ipnetwork=network, service_type=service_type)
    hostname="", host_addresses: HostAddresses = None, cname_aliases=[], service_type=""
    return _ipam.delete_service_host(
        hostname=hostname, host_addresses=host_addresses, cname_aliases=cname_aliases, service_type=service_type