diff --git a/gso/products/product_blocks/router.py b/gso/products/product_blocks/router.py index d8e9996ba0821d48765ae36f50df1bb2aa541752..5d1a307d85825759b734a0c06b665d1e7eb06866 100644 --- a/gso/products/product_blocks/router.py +++ b/gso/products/product_blocks/router.py @@ -68,12 +68,12 @@ class RouterBlockProvisioning(RouterBlockInactive, lifecycle=[SubscriptionLifecy router_fqdn: str router_ts_port: PortNumber - router_access_via_ts: bool | None = None - router_lo_ipv4_address: ipaddress.IPv4Address | None = None - router_lo_ipv6_address: ipaddress.IPv6Address | None = None - router_lo_iso_address: str | None = None - router_role: RouterRole | None = None - router_site: SiteBlockProvisioning | None + 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 + router_site: SiteBlockProvisioning vendor: RouterVendor diff --git a/gso/products/product_blocks/site.py b/gso/products/product_blocks/site.py index efe21c4b270a8974c1615b89f025012ff8793582..1852b24615076b2d76dde41db71a9e5d5fcc535f 100644 --- a/gso/products/product_blocks/site.py +++ b/gso/products/product_blocks/site.py @@ -82,16 +82,16 @@ class SiteBlockInactive( class SiteBlockProvisioning(SiteBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): """A site that's currently being provisioned, see :class:`SiteBlock`.""" - site_name: str | None = None - site_city: str | None = None - site_country: str | None = None - site_country_code: str | None = None - site_latitude: LatitudeCoordinate | None = None - site_longitude: LongitudeCoordinate | None = None - site_internal_id: int | None = None - site_bgp_community_id: int | None = None - site_tier: SiteTier | None = None - site_ts_address: str | None = None + site_name: str + site_city: str + site_country: str + site_country_code: str + site_latitude: LatitudeCoordinate + site_longitude: LongitudeCoordinate + site_internal_id: int + site_bgp_community_id: int + site_tier: SiteTier + site_ts_address: str 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 #: 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. - site_ts_address: str | None = None + site_ts_address: str diff --git a/gso/workflows/router/create_router.py b/gso/workflows/router/create_router.py index 3ea3e16250e9ccaee4559c43c3aedc8d89f0ff7b..e42d22991e83951c957b1c6b8caab69993386e5e 100644 --- a/gso/workflows/router/create_router.py +++ b/gso/workflows/router/create_router.py @@ -107,21 +107,24 @@ def initialize_subscription( subscription.router.vendor = vendor subscription.description = f"Router {fqdn}" - subscription = RouterProvisioning.from_other_lifecycle(subscription, SubscriptionLifecycle.PROVISIONING) - return {"subscription": subscription} @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.""" 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)) subscription.router.router_lo_ipv4_address = loopback_v4 subscription.router.router_lo_ipv6_address = loopback_v6 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} @@ -130,7 +133,7 @@ def create_netbox_device(subscription: RouterProvisioning) -> State: """Create a new NOKIA device in Netbox.""" NetboxClient().create_device( 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}