From 3658cc6b15da79b8eb9fa666d32601ea622f0732 Mon Sep 17 00:00:00 2001
From: root <root@simone03.dev.gap.geant.org>
Date: Fri, 31 Mar 2023 15:16:53 +0000
Subject: [PATCH] DeviceBlock and DeviceType for device

---
 geant_service_orchestrator/main.py            |  4 +-
 .../products/product_blocks/__init__.py       |  0
 .../products/product_blocks/device.py         | 58 +++++++++++++++++++
 .../products/product_types/__init__.py        |  0
 .../products/product_types/device.py          | 30 ++++++++++
 5 files changed, 90 insertions(+), 2 deletions(-)
 create mode 100644 geant_service_orchestrator/products/product_blocks/__init__.py
 create mode 100644 geant_service_orchestrator/products/product_blocks/device.py
 create mode 100644 geant_service_orchestrator/products/product_types/__init__.py
 create mode 100644 geant_service_orchestrator/products/product_types/device.py

diff --git a/geant_service_orchestrator/main.py b/geant_service_orchestrator/main.py
index 2e7800f1..24f60f65 100644
--- a/geant_service_orchestrator/main.py
+++ b/geant_service_orchestrator/main.py
@@ -1,9 +1,9 @@
 from orchestrator import OrchestratorCore
 from orchestrator.cli.main import app as core_cli
 from orchestrator.settings import AppSettings
+#import products
+#import workflows
 
-# import products
-# import workflows
 
 app = OrchestratorCore(base_settings=AppSettings())
 
diff --git a/geant_service_orchestrator/products/product_blocks/__init__.py b/geant_service_orchestrator/products/product_blocks/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/geant_service_orchestrator/products/product_blocks/device.py b/geant_service_orchestrator/products/product_blocks/device.py
new file mode 100644
index 00000000..17601997
--- /dev/null
+++ b/geant_service_orchestrator/products/product_blocks/device.py
@@ -0,0 +1,58 @@
+from typing import Optional
+
+from orchestrator.domain.base import ProductBlockModel
+from orchestrator.types import SubscriptionLifecycle
+import ipaddress
+
+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
+
+
+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
+
+
+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
diff --git a/geant_service_orchestrator/products/product_types/__init__.py b/geant_service_orchestrator/products/product_types/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/geant_service_orchestrator/products/product_types/device.py b/geant_service_orchestrator/products/product_types/device.py
new file mode 100644
index 00000000..6af0e3dd
--- /dev/null
+++ b/geant_service_orchestrator/products/product_types/device.py
@@ -0,0 +1,30 @@
+from orchestrator.domain.base import SubscriptionModel
+from orchestrator.types import SubscriptionLifecycle, strEnum
+
+from products.product_blocks.device import DeviceBlock, DeviceBlockInactive, DeviceBlockProvisioning
+
+
+class DeviceType(strEnum):
+    router = "router"
+    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
+
+
+class Device(DeviceProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]):
+    device_type: DeviceType
+    device_vendor: DeviceVendor
+    device: DeviceBlock
-- 
GitLab