Browse Source

Optimize roundtrips.

Joe Clarke 1 year ago
parent
commit
6288d1f707
1 changed files with 27 additions and 5 deletions
  1. 27 5
      automation/services/update-netbox-tool.py

+ 27 - 5
automation/services/update-netbox-tool.py

@@ -49,16 +49,21 @@ SKU_MAP = {
     "WS-C3750X-24P-S": "WS-C3750X-24P-S",
     "WS-C3750X-48P-S": "WS-C3750X-48P-S",
 }
+TYPE_OBJ_MAP = {}
 
 INTF_MAP = {"IDF": "loopback0", "Access": "Vlan127"}
 INTF_CIDR_MAP = {"IDF": 32, "Access": 24}
 
 SITE_MAP = {"IDF": "IDF Closet", "Access": "Conference Space"}
+SITE_OBJ_MAP = {}
 
 ROLE_MAP = {"IDF": "L3 Access Switch", "Access": "L2 Access Switch"}
+ROLE_OBJ_MAP = {}
 
 VRF_NAME = "default"
+VRF_OBJ = None
 TENANT_NAME = "Infrastructure"
+TENANT_OBJ = None
 
 
 def get_devs():
@@ -116,12 +121,28 @@ def delete_netbox_device(enb: ElementalNetbox, dname: str) -> None:
         sys.stderr.write(f"WARNING: Failed to delete NetBox device for {dname}\n")
 
 
+def populate_objects(enb: ElementalNetbox) -> None:
+    global ROLE_OBJ_MAP, SITE_OBJ_MAP, TYPE_OBJ_MAP, TENANT_OBJ, VRF_OBJ
+
+    for _, val in ROLE_MAP.items():
+        ROLE_OBJ_MAP[val] = enb.dcim.device_roles.get(name=val)
+
+    for _, val in SITE_MAP.items():
+        SITE_OBJ_MAP[val] = enb.dcim.sites.get(name=val)
+
+    for _, val in SKU_MAP.items():
+        TYPE_OBJ_MAP[val] = enb.dcim.device_types.get(part_number=val)
+
+    TENANT_OBJ = enb.tenancy.tenants.get(name=TENANT_NAME)
+    VRF_OBJ = enb.ipam.vrfs.get(name=VRF_NAME)
+
+
 def add_netbox_device(enb: ElementalNetbox, dev: dict) -> None:
-    role_obj = enb.dcim.device_roles.get(name=dev["role"])
-    type_obj = enb.dcim.device_types.get(part_number=dev["type"])
-    tenant_obj = enb.tenancy.tenants.get(name=TENANT_NAME)
-    site_obj = enb.dcim.sites.get(name=dev["site"])
-    vrf_obj = enb.ipam.vrfs.get(name=VRF_NAME)
+    role_obj = ROLE_OBJ_MAP[dev["role"]]
+    type_obj = TYPE_OBJ_MAP[dev["type"]]
+    tenant_obj = TENANT_OBJ
+    site_obj = SITE_OBJ_MAP[dev["site"]]
+    vrf_obj = VRF_OBJ
 
     if not role_obj:
         sys.stderr.write(f"ERROR: Invalid role for {dev['name']}: {dev['role']}\n")
@@ -179,6 +200,7 @@ if __name__ == "__main__":
     args = parser.parse_args()
 
     enb = ElementalNetbox()
+    populate_objects(enb)
 
     prev_records = []