1818from services import netbox
1919
2020
21- def build_sap_payload (model : SAPBlockProvisioning , subscription : SubscriptionModel ) -> netbox .VlanPayload :
21+ def build_sap_vlans_payload (model : SAPBlockProvisioning , subscription : SubscriptionModel ) -> list [netbox .VlanPayload ]:
22+ """Create and return a list of Netbox :class:`VlanPayload` for a :class:`~products.product_blocks.sap.SAPBlockProvisioning`.
23+
24+ Example payload::
25+
26+ {
27+ "vid": 4,
28+ "name": "paris01a 0/0/1 vlan 4",
29+ "status": "active",
30+ "group": 1
31+ }
32+
33+ Args:
34+ model: SAPBlockProvisioning
35+ subscription: The Subscription that will be provisioned
36+
37+ Returns: list[:class:`netbox.VlanPayload`]
38+
39+ """
40+ assert model .ims_id
41+ name = f"{ model .port .node .node_name } { model .port .port_name } "
42+ vlan_list = [vlan for vlan_start , vlan_end in model .vlan .to_list_of_tuples () for vlan in range (vlan_start , vlan_end + 1 )]
43+ return [netbox .VlanPayload (vid = vlan , group = model .ims_id , name = f"{ name } - { vlan } " ) for vlan in vlan_list ]
44+
45+
46+ def build_sap_vlan_group_payload (model : SAPBlockProvisioning , subscription : SubscriptionModel ) -> netbox .VlanGroupPayload :
47+ """Create and return a Netbox VlanGroupPayload object for a :class:`~products.product_blocks.sap.SAPBlockProvisioning`.
48+
49+ Example payload::
50+
51+ {
52+ "name": "paris01a 0/0/1 vlan 4",
53+ "vid_ranges": "5, 10, 15-20",
54+ }
55+
56+ Args:
57+ model: SAPBlockProvisioning
58+ subscription: The Subscription that will be provisioned
59+
60+ Returns: :class:`netbox.VlanGroupPayload`
61+
62+ """
63+ name = f"{ model .port .node .node_name } { model .port .port_name } "
64+ slug = name .replace (" " , "-" ).replace ("/" , "-" )
65+ return netbox .VlanGroupPayload (name = name , slug = slug , vid_ranges = model .vlan .to_list_of_tuples ())
66+
67+
68+ def build_sap_payload (model : SAPBlockProvisioning , subscription : SubscriptionModel ) -> netbox .VlansPayload :
2269 """Create and return a Netbox payload object for a :class:`~products.product_blocks.sap.SAPBlockProvisioning`.
2370
2471 Example payload::
2572
2673 {
2774 "vid": 4,
2875 "name": "paris01a 0/0/1 vlan 4",
29- "status": "active"
76+ "status": "active",
77+ "group": 1
3078 }
3179
3280 Args:
@@ -36,4 +84,5 @@ def build_sap_payload(model: SAPBlockProvisioning, subscription: SubscriptionMod
3684 Returns: :class:`netbox.VlanPayload`
3785
3886 """
39- return netbox .VlanPayload (vid = int (model .vlan ), name = f"{ model .port .node .node_name } { model .port .port_name } " )
87+ vlan_payloads = build_sap_vlans_payload (model , subscription )
88+ return netbox .VlansPayload (vlans = vlan_payloads )
0 commit comments