Skip to content
Snippets Groups Projects
Verified Commit a66f560e authored by Karel van Klink's avatar Karel van Klink :smiley_cat:
Browse files

make typing of provisioning products more strict

parent ecafbee5
No related branches found
No related tags found
1 merge request!162Feature/update router create workflow
Pipeline #85744 passed
...@@ -68,12 +68,12 @@ class RouterBlockProvisioning(RouterBlockInactive, lifecycle=[SubscriptionLifecy ...@@ -68,12 +68,12 @@ class RouterBlockProvisioning(RouterBlockInactive, lifecycle=[SubscriptionLifecy
router_fqdn: str router_fqdn: str
router_ts_port: PortNumber router_ts_port: PortNumber
router_access_via_ts: bool | None = None router_access_via_ts: bool
router_lo_ipv4_address: ipaddress.IPv4Address | None = None router_lo_ipv4_address: ipaddress.IPv4Address
router_lo_ipv6_address: ipaddress.IPv6Address | None = None router_lo_ipv6_address: ipaddress.IPv6Address
router_lo_iso_address: str | None = None router_lo_iso_address: str
router_role: RouterRole | None = None router_role: RouterRole
router_site: SiteBlockProvisioning | None router_site: SiteBlockProvisioning
vendor: RouterVendor vendor: RouterVendor
......
...@@ -82,16 +82,16 @@ class SiteBlockInactive( ...@@ -82,16 +82,16 @@ class SiteBlockInactive(
class SiteBlockProvisioning(SiteBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): class SiteBlockProvisioning(SiteBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]):
"""A site that's currently being provisioned, see :class:`SiteBlock`.""" """A site that's currently being provisioned, see :class:`SiteBlock`."""
site_name: str | None = None site_name: str
site_city: str | None = None site_city: str
site_country: str | None = None site_country: str
site_country_code: str | None = None site_country_code: str
site_latitude: LatitudeCoordinate | None = None site_latitude: LatitudeCoordinate
site_longitude: LongitudeCoordinate | None = None site_longitude: LongitudeCoordinate
site_internal_id: int | None = None site_internal_id: int
site_bgp_community_id: int | None = None site_bgp_community_id: int
site_tier: SiteTier | None = None site_tier: SiteTier
site_ts_address: str | None = None site_ts_address: str
class SiteBlock(SiteBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): class SiteBlock(SiteBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
...@@ -120,4 +120,4 @@ class SiteBlock(SiteBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]) ...@@ -120,4 +120,4 @@ class SiteBlock(SiteBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE])
#: The address of the terminal server that this router is connected to. The terminal server provides out of band #: The address of the terminal server that this router is connected to. The terminal server provides out of band
#: access. This is required in case a link goes down, or when a router is initially added to the network and it #: access. This is required in case a link goes down, or when a router is initially added to the network and it
#: does not have any IP trunks connected to it. #: does not have any IP trunks connected to it.
site_ts_address: str | None = None site_ts_address: str
...@@ -107,21 +107,24 @@ def initialize_subscription( ...@@ -107,21 +107,24 @@ def initialize_subscription(
subscription.router.vendor = vendor subscription.router.vendor = vendor
subscription.description = f"Router {fqdn}" subscription.description = f"Router {fqdn}"
subscription = RouterProvisioning.from_other_lifecycle(subscription, SubscriptionLifecycle.PROVISIONING)
return {"subscription": subscription} return {"subscription": subscription}
@step("Allocate loopback interfaces in IPAM") @step("Allocate loopback interfaces in IPAM")
def ipam_allocate_loopback(subscription: RouterProvisioning) -> State: def ipam_allocate_loopback(subscription: RouterInactive) -> State:
"""Allocate :term:`IPAM` resources for the loopback interface.""" """Allocate :term:`IPAM` resources for the loopback interface."""
fqdn = subscription.router.router_fqdn fqdn = subscription.router.router_fqdn
if not fqdn:
msg = f"Router fqdn for subscription id {subscription.subscription_id} is missing!"
raise ValueError(msg)
loopback_v4, loopback_v6 = infoblox.allocate_host(f"lo0.{fqdn}", "LO", [fqdn], str(subscription.subscription_id)) loopback_v4, loopback_v6 = infoblox.allocate_host(f"lo0.{fqdn}", "LO", [fqdn], str(subscription.subscription_id))
subscription.router.router_lo_ipv4_address = loopback_v4 subscription.router.router_lo_ipv4_address = loopback_v4
subscription.router.router_lo_ipv6_address = loopback_v6 subscription.router.router_lo_ipv6_address = loopback_v6
subscription.router.router_lo_iso_address = iso_from_ipv4(subscription.router.router_lo_ipv4_address) subscription.router.router_lo_iso_address = iso_from_ipv4(subscription.router.router_lo_ipv4_address)
subscription = RouterProvisioning.from_other_lifecycle(subscription, SubscriptionLifecycle.PROVISIONING)
return {"subscription": subscription} return {"subscription": subscription}
...@@ -130,7 +133,7 @@ def create_netbox_device(subscription: RouterProvisioning) -> State: ...@@ -130,7 +133,7 @@ def create_netbox_device(subscription: RouterProvisioning) -> State:
"""Create a new NOKIA device in Netbox.""" """Create a new NOKIA device in Netbox."""
NetboxClient().create_device( NetboxClient().create_device(
subscription.router.router_fqdn, subscription.router.router_fqdn,
str(subscription.router.router_site.site_tier), # type: ignore[union-attr] str(subscription.router.router_site.site_tier),
) )
return {"subscription": subscription} return {"subscription": subscription}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment