Skip to content

Network

API endpoints for network related operations.

SiteBlockSchema

Bases: OrchestratorBaseModel

Site block schema.

Source code in gso/api/v1/network.py
class SiteBlockSchema(OrchestratorBaseModel):
    """Site block schema."""

    site_name: str
    site_city: str
    site_country: str
    site_latitude: LatitudeCoordinate
    site_longitude: LongitudeCoordinate
    site_internal_id: int

RouterBlockSchema

Bases: OrchestratorBaseModel

Router block schema.

Source code in gso/api/v1/network.py
class RouterBlockSchema(OrchestratorBaseModel):
    """Router block schema."""

    subscription_instance_id: UUID
    router_fqdn: str
    router_access_via_ts: bool
    router_lo_ipv4_address: ipaddress.IPv4Address
    router_lo_ipv6_address: ipaddress.IPv6Address
    router_lo_iso_address: str
    router_role: RouterRole
    vendor: Vendor
    router_site: SiteBlockSchema
    owner_subscription_id: UUID

IptrunkSideBlockSchema

Bases: OrchestratorBaseModel

Iptrunk side block schema.

Source code in gso/api/v1/network.py
class IptrunkSideBlockSchema(OrchestratorBaseModel):
    """Iptrunk side block schema."""

    subscription_instance_id: UUID
    iptrunk_side_node: RouterBlockSchema

IptrunkBlockSchema

Bases: OrchestratorBaseModel

Iptrunk block schema.

Source code in gso/api/v1/network.py
class IptrunkBlockSchema(OrchestratorBaseModel):
    """Iptrunk block schema."""

    subscription_instance_id: UUID
    iptrunk_speed: PhysicalPortCapacity
    iptrunk_type: IptrunkType
    iptrunk_ipv4_network: ipaddress.IPv4Network
    iptrunk_ipv6_network: ipaddress.IPv6Network
    iptrunk_capacity: str
    iptrunk_isis_metric: int
    iptrunk_sides: list[IptrunkSideBlockSchema]
    gs_id: str

IptrunkSchema

Bases: OrchestratorBaseModel

Iptrunk schema.

Source code in gso/api/v1/network.py
class IptrunkSchema(OrchestratorBaseModel):
    """Iptrunk schema."""

    subscription_id: UUID
    insync: bool
    iptrunk: IptrunkBlockSchema

EdgePortSchema

Bases: OrchestratorBaseModel

Edge port schema.

Source code in gso/api/v1/network.py
class EdgePortSchema(OrchestratorBaseModel):
    """Edge port schema."""

    node: RouterBlockSchema

L3InterfacePortSchema

Bases: OrchestratorBaseModel

L3 interface port schema.

Source code in gso/api/v1/network.py
class L3InterfacePortSchema(OrchestratorBaseModel):
    """L3 interface port schema."""

    edge_port: EdgePortSchema

PlacementPortBlockSchema

Bases: OrchestratorBaseModel

Placement port block schema.

Source code in gso/api/v1/network.py
class PlacementPortBlockSchema(OrchestratorBaseModel):
    """Placement port block schema."""

    l3_interface: L3InterfacePortSchema

IPeeringConnectionSchema

Bases: OrchestratorBaseModel

Peering connection schema.

Source code in gso/api/v1/network.py
class IPeeringConnectionSchema(OrchestratorBaseModel):
    """Peering connection schema."""

    placement_port: PlacementPortBlockSchema

CommercialPeerBlockSchema

Bases: OrchestratorBaseModel

Commercial peer block schema.

Source code in gso/api/v1/network.py
class CommercialPeerBlockSchema(OrchestratorBaseModel):
    """Commercial peer block schema."""

    partner_org_name: str
    peering_connection_list: list[IPeeringConnectionSchema]

CommercialPeerSchema

Bases: OrchestratorBaseModel

Commercial peer block schema.

Source code in gso/api/v1/network.py
class CommercialPeerSchema(OrchestratorBaseModel):
    """Commercial peer block schema."""

    subscription_id: UUID
    insync: bool
    commercial_peer: CommercialPeerBlockSchema

NetworkTopologyDomainModelSchema

Bases: OrchestratorBaseModel

Network topology domain model schema.

Source code in gso/api/v1/network.py
class NetworkTopologyDomainModelSchema(OrchestratorBaseModel):
    """Network topology domain model schema."""

    iptrunks: list[IptrunkSchema]
    commercial_peers: list[CommercialPeerSchema]

_calculate_iptrunk_capacity(iptrunk_sides, iptrunk_speed)

Calculate the total capacity of an IP trunk.

Source code in gso/api/v1/network.py
def _calculate_iptrunk_capacity(iptrunk_sides: list, iptrunk_speed: PhysicalPortCapacity) -> str:
    """Calculate the total capacity of an IP trunk."""
    int_iptrunk_speed = int(iptrunk_speed.value.replace("G", ""))
    capacity = int_iptrunk_speed * len(iptrunk_sides[0]["iptrunk_side_ae_members"])
    return f"{capacity}G"

network_topology()

Retrieve the network topology.

Source code in gso/api/v1/network.py
@router.get("/topology", status_code=status.HTTP_200_OK, response_model=NetworkTopologyDomainModelSchema)
def network_topology() -> NetworkTopologyDomainModelSchema:
    """Retrieve the network topology."""
    iptrunks = _get_ip_trunks()
    commercial_peers = _get_commercial_peers()

    return NetworkTopologyDomainModelSchema(iptrunks=iptrunks, commercial_peers=commercial_peers)