Skip to content

Base create imported placement port

Base functionality for creating an imported placement port subscription.

L3Interface

Bases: BaseModel

L3 Interface model for imported placement port subscriptions.

Source code in gso/workflows/placement_port/base_create_imported_placement_port.py
class L3Interface(BaseModel):
    """L3 Interface model for imported placement port subscriptions."""

    gs_id: IMPORTED_GS_ID | None = None
    edge_port: str
    is_tagged: bool = True
    vlan_id: VLAN_ID | None = None
    ipv4_address: IPv4AddressType | None = None
    ipv4_mask: IPv4Netmask | None = None
    ipv6_address: IPv6AddressType | None = None
    ipv6_mask: IPv6Netmask | None = None
    custom_firewall_filters: bool = False

initial_input_generator()

Take all information passed to this workflow by the API endpoint that was called.

Source code in gso/workflows/placement_port/base_create_imported_placement_port.py
def initial_input_generator() -> FormGenerator:
    """Take all information passed to this workflow by the API endpoint that was called."""

    class ImportPlacementPortForm(FormPage):
        l3_interface: L3Interface
        product_name: PlacementPortNameType
        partner: str

    user_input = yield ImportPlacementPortForm

    return user_input.model_dump()

initialize_subscription(subscription, l3_interface)

Initialize the placement port subscription with the provided parameters.

Source code in gso/workflows/placement_port/base_create_imported_placement_port.py
@step("Initialize subscription")
def initialize_subscription(
    subscription: SubscriptionModel,
    l3_interface: dict[str, Any],
) -> State:
    """Initialize the placement port subscription with the provided parameters."""
    edge_port_subscription = EdgePort.from_subscription(l3_interface.pop("edge_port"))
    subscription.l3_interface = subscription.l3_interface.new(  # type: ignore[attr-defined]
        uuid4(),
        edge_port=edge_port_subscription.edge_port,
        **l3_interface,
    )

    subscription = SubscriptionModel.from_other_lifecycle(subscription, SubscriptionLifecycle.PROVISIONING)
    subscription.description = f"{subscription.product.name} - {l3_interface['gs_id']}"

    return {"subscription": subscription}