diff --git a/gso/products/product_blocks/opengear.py b/gso/products/product_blocks/opengear.py new file mode 100644 index 0000000000000000000000000000000000000000..992a06e06626b4191edb32109d53a66fcc8a1685 --- /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 0000000000000000000000000000000000000000..73ec76917eb10fa0c789c16c6086750bc5003451 --- /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