From c8fb5efea13c39d999dc04260ae15c61c67f12f3 Mon Sep 17 00:00:00 2001
From: Simone Spinelli <simone.spinelli@geant.org>
Date: Fri, 21 Apr 2023 11:42:47 +0000
Subject: [PATCH] First set of attributes

---
 gso/products/product_blocks/iptrunks.py | 88 +++++++++++++++++++++++++
 1 file changed, 88 insertions(+)
 create mode 100644 gso/products/product_blocks/iptrunks.py

diff --git a/gso/products/product_blocks/iptrunks.py b/gso/products/product_blocks/iptrunks.py
new file mode 100644
index 00000000..37a26c17
--- /dev/null
+++ b/gso/products/product_blocks/iptrunks.py
@@ -0,0 +1,88 @@
+from typing import Optional
+
+from orchestrator.domain.base import ProductBlockModel
+from orchestrator.types import SubscriptionLifecycle
+import ipaddress
+
+#  - id: GS-00012
+#    name: AMS2-LON-IPTRUNK-100G
+#    config:
+#      common:
+#        speed: '100'
+#        is_leased_line: false
+#        isis_metric: '9000'
+#        minimum_links: 1
+#      nodeA:
+#        name: rt2.ams.nl.geant.net
+#        ae_name: ae2
+#        ipv4_address: 62.40.98.164/31
+#        ipv6_address: 2001:798:cc::5/126
+#        members:
+#          - et-0/0/0
+#        port_id: GA-02036
+#      nodeB:
+#        name: mx1.lon.uk.geant.net
+#        ae_name: ae8
+#        ipv4_address: 62.40.98.165/31
+#        ipv6_address: 2001:798:cc::6/126
+#        members:
+#          - et-4/0/2
+#        port_id: GA-01834
+
+
+class DeviceBlockInactive(ProductBlockModel,
+                          lifecycle=[SubscriptionLifecycle.INITIAL],
+                          product_block_name="DeviceBlock"):
+    geant_s_sid: Optional[str] = None
+    iptrunk_speed: Optional[str] = None
+    iptrunk_minimum_links: Optional[int] = None
+    iptrunk_ipv4_network: Optional[ipaddress.IPv4Network] = None
+    iptrunk_ipv6_network: Optional[ipaddress.IPv6Network] = None
+    #
+    iptrunk_sideA_fqdn: Optional[str] = None 
+    iptrunk_sideA_ae_iface: Optional[str] = None 
+    iptrunk_sideA_ae_geant_a_sid: Optional[str] = None 
+    iptrunk_sideA_ae_members: Optional[list] = None 
+    #
+    iptrunk_sideB_fqdn: Optional[str] = None 
+    iptrunk_sideB_ae_iface: Optional[str] = None 
+    iptrunk_sideB_ae_geant_a_sid: Optional[str] = None 
+    iptrunk_sideB_ae_members: Optional[list] = 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
-- 
GitLab