diff --git a/gso/products/__init__.py b/gso/products/__init__.py index b8b60c156ba992f6394d41035f9b66b3b3645fbd..857128fb672bf6350e674bfc81e8d89fa2765af2 100644 --- a/gso/products/__init__.py +++ b/gso/products/__init__.py @@ -2,9 +2,11 @@ from orchestrator.domain import SUBSCRIPTION_MODEL_REGISTRY from gso.products.product_types.device import Device from gso.products.product_types.iptrunk import Iptrunk +from gso.products.product_types.site import Site SUBSCRIPTION_MODEL_REGISTRY.update( { + "Site": Site, "Router": Device, "Switch": Device, "Iptrunk": Iptrunk, diff --git a/gso/products/product_blocks/device.py b/gso/products/product_blocks/device.py index 9e34743f2e1e2eea7f3610cd6e3cab616061e020..44581ef557c9f49fe51f7633ac919267e0a68a84 100644 --- a/gso/products/product_blocks/device.py +++ b/gso/products/product_blocks/device.py @@ -2,62 +2,62 @@ from typing import Optional from orchestrator.domain.base import ProductBlockModel from orchestrator.types import SubscriptionLifecycle +from gso.products.product_blocks.site \ + import SiteBlock, SiteBlockInactive, SiteBlockProvisioning import ipaddress +class DeviceVendor(strEnum): + juniper = "juniper" + nokia = "nokia" + +class DeviceRole(strEnum): + p = "p" + pe = "pe" + amt = "amt" class DeviceBlockInactive(ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="DeviceBlock"): - fqdn: Optional[str] = None - ts_address: Optional[str] = None - ts_port: Optional[int] = None - lo_ipv4_address: Optional[ipaddress.IPv4Address] = None - lo_ipv6_address: Optional[ipaddress.IPv6Address] = None - lo_iso_address: Optional[str] = None - si_ipv4_network: Optional[ipaddress.IPv4Network] = None - ias_lt_ipv4_network: Optional[ipaddress.IPv4Network] = None - ias_lt_ipv6_network: Optional[ipaddress.IPv6Network] = None - site_city: Optional[str] = None - site_country: Optional[str] = None - site_country_code: Optional[str] = None - site_latitude: Optional[str] = None - site_longitude: Optional[str] = None - snmp_location: Optional[str] = None + device_fqdn: Optional[str] = None + device_ts_address: Optional[str] = None + device_ts_port: Optional[int] = None + device_lo_ipv4_address: Optional[ipaddress.IPv4Address] = None + device_lo_ipv6_address: Optional[ipaddress.IPv6Address] = None + device_lo_iso_address: Optional[str] = None + device_si_ipv4_network: Optional[ipaddress.IPv4Network] = None + device_ias_lt_ipv4_network: Optional[ipaddress.IPv4Network] = None + device_ias_lt_ipv6_network: Optional[ipaddress.IPv6Network] = None + device_vendor: Optional[DeviceVendor] = None + device_role: Optional[DeviceRole] = None + device_site: Optional[SiteBlockInactive] class DeviceBlockProvisioning(DeviceBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): - fqdn: str - ts_address: str - ts_port: str - lo_ipv4_address: Optional[ipaddress.IPv4Address] = None - lo_ipv6_address: Optional[ipaddress.IPv6Address] = None - lo_iso_address: Optional[str] = None - si_ipv4_network: Optional[ipaddress.IPv4Network] = None - ias_lt_ipv4_network: Optional[ipaddress.IPv4Network] = None - ias_lt_ipv6_network: Optional[ipaddress.IPv6Network] = None - site_city: Optional[str] = None - site_country: Optional[str] = None - site_country_code: Optional[str] = None - site_latitude: Optional[str] = None - site_longitude: Optional[str] = None - snmp_location: Optional[str] = None - + device_fqdn: str + device_ts_address: str + device_ts_port: str + device_lo_ipv4_address: Optional[ipaddress.IPv4Address] = None + device_lo_ipv6_address: Optional[ipaddress.IPv6Address] = None + device_lo_iso_address: Optional[str] = None + device_si_ipv4_network: Optional[ipaddress.IPv4Network] = None + device_ias_lt_ipv4_network: Optional[ipaddress.IPv4Network] = None + device_ias_lt_ipv6_network: Optional[ipaddress.IPv6Network] = None + device_vendor: Optional[DeviceVendor] = None + device_role: Optional[DeviceRole] = None + device_site: Optional[SiteBlockProvisioning] class DeviceBlock(DeviceBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): - fqdn: str - ts_address: str - ts_port: str - lo_ipv4_address: ipaddress.IPv4Address - lo_ipv6_address: ipaddress.IPv6Address - lo_iso_address: str - si_ipv4_network: ipaddress.IPv4Network - ias_lt_ipv4_network: ipaddress.IPv4Network - ias_lt_ipv6_network: ipaddress.IPv6Network - site_city: str - site_country: str - site_country_code: str - site_latitude: str - site_longitude: str - snmp_location: str + device_fqdn: str + device_ts_address: str + device_ts_port: str + device_lo_ipv4_address: ipaddress.IPv4Address + device_lo_ipv6_address: ipaddress.IPv6Address + device_lo_iso_address: str + device_si_ipv4_network: ipaddress.IPv4Network + device_ias_lt_ipv4_network: ipaddress.IPv4Network + device_ias_lt_ipv6_network: ipaddress.IPv6Network + device_vendor: DeviceVendor + device_role: DeviceRole + device_site: SiteBlock diff --git a/gso/products/product_blocks/site.py b/gso/products/product_blocks/site.py new file mode 100644 index 0000000000000000000000000000000000000000..564dd811dc9333f1a662bf75c1b3b3e39ada1e4f --- /dev/null +++ b/gso/products/product_blocks/site.py @@ -0,0 +1,51 @@ +from typing import Optional +from pydantic import Field + +from orchestrator.domain.base import ProductBlockModel +from orchestrator.types import SubscriptionLifecycle, Enum + +import ipaddress + +class SiteTier(Enum): + tier1 = 1 + tier2 = 2 + tier3 = 3 + tier4 = 4 + + +class SiteBlockInactive(ProductBlockModel, + lifecycle=[SubscriptionLifecycle.INITIAL], + product_block_name="SiteBlock"): + site_name: Optional[str] + site_city: Optional[str] + site_country: Optional[str] + site_country_code: Optional[str] + site_latitude: Optional[float] + site_longitude: Optional[float] + site_internal_id: Optional[int] + site_bgp_id: Optional[int] + site_tier: Optional[SiteTier] + +class SiteBlockProvisioning(SiteBlockInactive, + lifecycle=[SubscriptionLifecycle.PROVISIONING]): + site_name: Optional[str] + site_city: Optional[str] + site_country: Optional[str] + site_country_code: Optional[str] + site_latitude: Optional[float] + site_longitude: Optional[float] + site_internal_id: Optional[int] + site_bgp_id: Optional[int] + site_tier: Optional[SiteTier] + +class SiteBlock(SiteBlockProvisioning, + lifecycle=[SubscriptionLifecycle.ACTIVE]): + site_name: str + site_city: str + site_country: str + site_country_code: str + site_latitude: float + site_longitude: float + site_internal_id: int + site_bgp_id: int + site_tier: SiteTier \ No newline at end of file diff --git a/gso/products/product_types/device.py b/gso/products/product_types/device.py index e79762c12f9fae68b409955b9e4a5a49e08c75dc..17a99081b68919cbc8d213251432db23fbee6146 100644 --- a/gso/products/product_types/device.py +++ b/gso/products/product_types/device.py @@ -10,21 +10,14 @@ class DeviceType(strEnum): switch = "switch" -class DeviceVendor(strEnum): - Juniper = "Juniper" - Newvendor = "Newvendor" - - class DeviceInactive(SubscriptionModel, is_base=True): device_type: DeviceType - device_vendor: DeviceVendor device: DeviceBlockInactive class DeviceProvisioning(DeviceInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): device_type: DeviceType - device_vendor: DeviceVendor device: DeviceBlockProvisioning diff --git a/gso/products/product_types/site.py b/gso/products/product_types/site.py new file mode 100644 index 0000000000000000000000000000000000000000..003e37d4962fbd8ac45b0d0d3e46fa4340ffb53a --- /dev/null +++ b/gso/products/product_types/site.py @@ -0,0 +1,18 @@ +from orchestrator.domain.base import SubscriptionModel +from orchestrator.types import SubscriptionLifecycle, strEnum + +from gso.products.product_blocks.site \ + import SiteBlock, SiteBlockInactive, SiteBlockProvisioning + + +class SiteInactive(SubscriptionModel, is_base=True): + site: SiteBlockInactive + + +class SiteProvisioning(SiteInactive, + lifecycle=[SubscriptionLifecycle.PROVISIONING]): + site: SiteBlockProvisioning + + +class Site(SiteProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): + site: SiteBlock \ No newline at end of file