From f567b1c9c42e9b2c5a2870bbf0af2eb2e5e2604b Mon Sep 17 00:00:00 2001 From: Neda Moeini <neda.moeini@geant.org> Date: Fri, 26 Apr 2024 10:52:45 +0200 Subject: [PATCH] Created Opengear product block and product type. --- gso/products/product_blocks/opengear.py | 45 +++++++++++++++++++++++++ gso/products/product_types/opengear.py | 24 +++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 gso/products/product_blocks/opengear.py create mode 100644 gso/products/product_types/opengear.py diff --git a/gso/products/product_blocks/opengear.py b/gso/products/product_blocks/opengear.py new file mode 100644 index 00000000..992a06e0 --- /dev/null +++ b/gso/products/product_blocks/opengear.py @@ -0,0 +1,45 @@ +"""Product block for :class:`Opengear` products.""" +import ipaddress + +from orchestrator.domain.base import ProductBlockModel +from orchestrator.types import SubscriptionLifecycle + +from gso.products.product_blocks.site import ( + SiteBlock, + SiteBlockInactive, + SiteBlockProvisioning, +) + + +class OpengearBlockInactive( + ProductBlockModel, + lifecycle=[SubscriptionLifecycle.INITIAL], + product_block_name="OpengearBlock", +): + """An Opengear that's being currently inactive. See :class:`OpengearBlock`.""" + + opengear_hostname: str | None = None + opengear_site: SiteBlockInactive | None = None + opengear_wan_address: ipaddress.IPv4Address | None = None + opengear_wan_netmask: ipaddress.IPv4Address | None = None + opengear_wan_gateway: ipaddress.IPv4Address | None = None + + +class OpengearBlockProvisioning(OpengearBlockInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): + """An Opengear that's being provisioned. See :class:`OpengearBlock`.""" + + opengear_hostname: str + opengear_site: SiteBlockProvisioning + opengear_wan_address: ipaddress.IPv4Address | None = None + opengear_wan_netmask: ipaddress.IPv4Address | None = None + opengear_wan_gateway: ipaddress.IPv4Address | None = None + + +class OpengearBlock(OpengearBlockProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): + """An Opengear that's currently deployed in the network.""" + + opengear_hostname: str + opengear_site: SiteBlock + opengear_wan_address: ipaddress.IPv4Address + opengear_wan_netmask: ipaddress.IPv4Address + opengear_wan_gateway: ipaddress.IPv4Address diff --git a/gso/products/product_types/opengear.py b/gso/products/product_types/opengear.py new file mode 100644 index 00000000..73ec7691 --- /dev/null +++ b/gso/products/product_types/opengear.py @@ -0,0 +1,24 @@ +"""An Opengear product type.""" + +from orchestrator.domain.base import SubscriptionModel +from orchestrator.types import SubscriptionLifecycle + +from gso.products.product_blocks.opengear import OpengearBlock, OpengearBlockInactive, OpengearBlockProvisioning + + +class OpengearInactive(SubscriptionModel, is_base=True): + """An inactive Opengear.""" + + opengear: OpengearBlockInactive + + +class OpengearProvisioning(OpengearInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): + """An Opengear that is being provisioned.""" + + opengear: OpengearBlockProvisioning + + +class OpenGear(OpengearProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): + """An Opengear that is currently active.""" + + opengear: OpengearBlock -- GitLab