Skip to content

Validate lan switch interconnect

Validation workflow for LAN Switch Interconnect subscription objects.

validate_ipam(subscription)

Validate that :term:DNS records are registered in :term:IPAM correctly.

Source code in gso/workflows/lan_switch_interconnect/validate_lan_switch_interconnect.py
@step("Validate IPAM configuration")
def validate_ipam(subscription: LanSwitchInterconnect) -> None:
    """Validate that :term:`DNS` records are registered in :term:`IPAM` correctly."""
    switch_fqdn = subscription.lan_switch_interconnect.switch_side.switch.fqdn
    router_fqdn = (
        f"{subscription.lan_switch_interconnect.router_side.ae_iface}."
        f"{subscription.lan_switch_interconnect.router_side.node.router_fqdn}"
    )

    for fqdn in [switch_fqdn, router_fqdn]:
        host_record = find_host_by_fqdn(fqdn)
        if not host_record or str(subscription.subscription_id) not in host_record.comment:
            msg = "DNS record is incorrectly configured in IPAM, please investigate this manually!"
            raise ProcessFailureError(msg, details=host_record)

    lan_interconnect_network = generate_lan_switch_interconnect_subnet_v4(
        subscription.lan_switch_interconnect.router_side.node.router_site.site_internal_id
    )
    network_record = find_network_by_cidr(lan_interconnect_network)
    if not network_record or str(subscription.subscription_id) not in network_record.comment:
        msg = "LAN Switch Interconnect network is incorrectly configured in IPAM, please investigate this manually!"
        raise ProcessFailureError(msg, details=network_record)

validate_config(subscription)

Workflow step for running a playbook that checks whether config has drifted.

Source code in gso/workflows/lan_switch_interconnect/validate_lan_switch_interconnect.py
@step("Check config for drift")
def validate_config(subscription: dict[str, Any]) -> LSOState:
    """Workflow step for running a playbook that checks whether config has drifted."""
    return {
        "playbook_name": "lan_switch_interconnect.yaml",
        "inventory": {
            "all": {
                "hosts": {
                    subscription["lan_switch_interconnect"]["switch_side"]["switch"]["fqdn"]: None,
                    subscription["lan_switch_interconnect"]["router_side"]["node"]["router_fqdn"]: None,
                }
            }
        },
        "extra_vars": {
            "subscription_json": subscription,
            "verb": "deploy",
            "dry_run": "true",
            "is_verification_workflow": "true",
        },
    }

validate_lan_switch_interconnect()

Validate an existing LAN Switch Interconnect.

Source code in gso/workflows/lan_switch_interconnect/validate_lan_switch_interconnect.py
@workflow(
    "Validate LAN Switch Interconnect", target=Target.SYSTEM, initial_input_form=(wrap_modify_initial_input_form(None))
)
def validate_lan_switch_interconnect() -> StepList:
    """Validate an existing LAN Switch Interconnect."""
    return (
        begin
        >> store_process_subscription(Target.SYSTEM)
        >> unsync
        >> validate_ipam
        >> anonymous_lso_interaction(validate_config)
        >> resync
        >> done
    )