Skip to content
Snippets Groups Projects
ipam.py 2.14 KiB
Newer Older
Erik Reid's avatar
Erik Reid committed
import ipaddress
from pydantic import BaseSettings
from gso import settings
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) -> ServiceNetworks:
    v4_service_network = _ipam.allocate_service_ipv4_network(service_type=service_type)
    v6_service_network = _ipam.allocate_service_ipv6_network(service_type=service_type)
Erik Reid's avatar
Erik Reid committed
    return ServiceNetworks(
        v4=v4_service_network.v4,
        v6=v6_service_network.v6)
def new_service_host(hostname, service_type, service_networks: ServiceNetworks) -> HostAddresses:
    return _ipam.allocate_service_host(hostname=hostname, service_type=service_type, service_networks=service_networks)


if __name__ == '__main__':
    # sample call flow to allocate two loopback interfaces and a trunk service
    # new_service_host can be called passing networks or addresses
    # - the first time is called by passing a specific ipv4/ipv6 address pair
    # - the rest are called by passing the ipv4/ipv6 network pair

    hostname_A = 'newhost1'
    hostname_B = 'newhost2'
    lo1_service_networks = new_service_networks('LO')
    lo1_v4_host_address = lo1_service_networks.v4.network_address
    lo1_v6_host_address = lo1_service_networks.v6.network_address
    lo1_host_addresses = HostAddresses(v4=lo1_v4_host_address, v6=lo1_v6_host_address)
    new_service_host(hostname_A, 'LO', lo1_service_networks)
    lo2_service_networks = new_service_networks('LO')
    new_service_host(hostname_B, 'LO', lo2_service_networks)
    trunk12_service_networks = new_service_networks('TRUNK')
    new_service_host(hostname_A, 'TRUNK', trunk12_service_networks)
    new_service_host(hostname_B, 'TRUNK', trunk12_service_networks)