From 036d3f881e1dc53072bc808789e2e28d860faa37 Mon Sep 17 00:00:00 2001 From: Palmer Sample Date: Mon, 6 Jun 2022 13:54:54 -0400 Subject: [PATCH] Added device type interface startup script and sample YAML initializer Renumber startup scripts to place platform initialization before the devices to enable platform specification during device creation --- initializers/device_type_interfaces.yml | 18 +++++++++++++ .../{220_platforms.py => 180_platforms.py} | 0 ...80_device_roles.py => 190_device_roles.py} | 0 ...90_device_types.py => 200_device_types.py} | 0 startup_scripts/210_device_type_interfaces.py | 27 +++++++++++++++++++ .../{200_devices.py => 220_devices.py} | 0 ...m_interfaces.py => 230_dcim_interfaces.py} | 0 ..._route_targets.py => 240_route_targets.py} | 0 startup_scripts/{240_vrfs.py => 250_vrfs.py} | 0 startup_scripts/{250_rirs.py => 260_rirs.py} | 0 startup_scripts/{260_asns.py => 270_asns.py} | 0 .../{270_aggregates.py => 280_aggregates.py} | 0 ...vlan_roles.py => 290_prefix_vlan_roles.py} | 0 ..._cluster_types.py => 300_cluster_types.py} | 0 ...luster_groups.py => 310_cluster_groups.py} | 0 .../{310_clusters.py => 320_clusters.py} | 0 ...{320_vlan_groups.py => 330_vlan_groups.py} | 0 .../{330_vlans.py => 340_vlans.py} | 0 ...al_machines.py => 350_virtual_machines.py} | 0 ...es.py => 360_virtualization_interfaces.py} | 0 .../{360_prefixes.py => 370_prefixes.py} | 0 ...70_ip_addresses.py => 380_ip_addresses.py} | 0 ...{380_primary_ips.py => 390_primary_ips.py} | 0 23 files changed, 45 insertions(+) create mode 100644 initializers/device_type_interfaces.yml rename startup_scripts/{220_platforms.py => 180_platforms.py} (100%) rename startup_scripts/{180_device_roles.py => 190_device_roles.py} (100%) rename startup_scripts/{190_device_types.py => 200_device_types.py} (100%) create mode 100644 startup_scripts/210_device_type_interfaces.py rename startup_scripts/{200_devices.py => 220_devices.py} (100%) rename startup_scripts/{210_dcim_interfaces.py => 230_dcim_interfaces.py} (100%) rename startup_scripts/{230_route_targets.py => 240_route_targets.py} (100%) rename startup_scripts/{240_vrfs.py => 250_vrfs.py} (100%) rename startup_scripts/{250_rirs.py => 260_rirs.py} (100%) rename startup_scripts/{260_asns.py => 270_asns.py} (100%) rename startup_scripts/{270_aggregates.py => 280_aggregates.py} (100%) rename startup_scripts/{280_prefix_vlan_roles.py => 290_prefix_vlan_roles.py} (100%) rename startup_scripts/{290_cluster_types.py => 300_cluster_types.py} (100%) rename startup_scripts/{300_cluster_groups.py => 310_cluster_groups.py} (100%) rename startup_scripts/{310_clusters.py => 320_clusters.py} (100%) rename startup_scripts/{320_vlan_groups.py => 330_vlan_groups.py} (100%) rename startup_scripts/{330_vlans.py => 340_vlans.py} (100%) rename startup_scripts/{340_virtual_machines.py => 350_virtual_machines.py} (100%) rename startup_scripts/{350_virtualization_interfaces.py => 360_virtualization_interfaces.py} (100%) rename startup_scripts/{360_prefixes.py => 370_prefixes.py} (100%) rename startup_scripts/{370_ip_addresses.py => 380_ip_addresses.py} (100%) rename startup_scripts/{380_primary_ips.py => 390_primary_ips.py} (100%) diff --git a/initializers/device_type_interfaces.yml b/initializers/device_type_interfaces.yml new file mode 100644 index 0000000..a5dccbd --- /dev/null +++ b/initializers/device_type_interfaces.yml @@ -0,0 +1,18 @@ +# - device_type: Other +# name: GigabitEthernet1 +# type: 10gbase-t +# mgmt_only: true +# description: Management interface +# +# - device_type: Other +# name: GigabitEthernet2 +# type: 10gbase-t +# mgmt_only: false +# description: Data interface +# +# - device_type: Other +# name: GigabitEthernet3 +# type: 1000base-t +# description: GigE data interface +--- + diff --git a/startup_scripts/220_platforms.py b/startup_scripts/180_platforms.py similarity index 100% rename from startup_scripts/220_platforms.py rename to startup_scripts/180_platforms.py diff --git a/startup_scripts/180_device_roles.py b/startup_scripts/190_device_roles.py similarity index 100% rename from startup_scripts/180_device_roles.py rename to startup_scripts/190_device_roles.py diff --git a/startup_scripts/190_device_types.py b/startup_scripts/200_device_types.py similarity index 100% rename from startup_scripts/190_device_types.py rename to startup_scripts/200_device_types.py diff --git a/startup_scripts/210_device_type_interfaces.py b/startup_scripts/210_device_type_interfaces.py new file mode 100644 index 0000000..77f6b53 --- /dev/null +++ b/startup_scripts/210_device_type_interfaces.py @@ -0,0 +1,27 @@ +import sys + +from dcim.models import DeviceType, InterfaceTemplate +from startup_script_utils import load_yaml, pop_custom_fields, set_custom_fields_values + +interfaces = load_yaml("/opt/netbox/initializers/device_type_interfaces.yml") + +if interfaces is None: + sys.exit() + +required_assocs = {"device_type": (DeviceType, "model")} + +for params in interfaces: + custom_field_data = pop_custom_fields(params) + + for assoc, details in required_assocs.items(): + model, field = details + query = {field: params.pop(assoc)} + + params[assoc] = model.objects.get(**query) + + interface, created = InterfaceTemplate.objects.get_or_create(**params) + + if created: + set_custom_fields_values(interface, custom_field_data) + + print("🧷 Created interface template", interface.device_type, interface.name) diff --git a/startup_scripts/200_devices.py b/startup_scripts/220_devices.py similarity index 100% rename from startup_scripts/200_devices.py rename to startup_scripts/220_devices.py diff --git a/startup_scripts/210_dcim_interfaces.py b/startup_scripts/230_dcim_interfaces.py similarity index 100% rename from startup_scripts/210_dcim_interfaces.py rename to startup_scripts/230_dcim_interfaces.py diff --git a/startup_scripts/230_route_targets.py b/startup_scripts/240_route_targets.py similarity index 100% rename from startup_scripts/230_route_targets.py rename to startup_scripts/240_route_targets.py diff --git a/startup_scripts/240_vrfs.py b/startup_scripts/250_vrfs.py similarity index 100% rename from startup_scripts/240_vrfs.py rename to startup_scripts/250_vrfs.py diff --git a/startup_scripts/250_rirs.py b/startup_scripts/260_rirs.py similarity index 100% rename from startup_scripts/250_rirs.py rename to startup_scripts/260_rirs.py diff --git a/startup_scripts/260_asns.py b/startup_scripts/270_asns.py similarity index 100% rename from startup_scripts/260_asns.py rename to startup_scripts/270_asns.py diff --git a/startup_scripts/270_aggregates.py b/startup_scripts/280_aggregates.py similarity index 100% rename from startup_scripts/270_aggregates.py rename to startup_scripts/280_aggregates.py diff --git a/startup_scripts/280_prefix_vlan_roles.py b/startup_scripts/290_prefix_vlan_roles.py similarity index 100% rename from startup_scripts/280_prefix_vlan_roles.py rename to startup_scripts/290_prefix_vlan_roles.py diff --git a/startup_scripts/290_cluster_types.py b/startup_scripts/300_cluster_types.py similarity index 100% rename from startup_scripts/290_cluster_types.py rename to startup_scripts/300_cluster_types.py diff --git a/startup_scripts/300_cluster_groups.py b/startup_scripts/310_cluster_groups.py similarity index 100% rename from startup_scripts/300_cluster_groups.py rename to startup_scripts/310_cluster_groups.py diff --git a/startup_scripts/310_clusters.py b/startup_scripts/320_clusters.py similarity index 100% rename from startup_scripts/310_clusters.py rename to startup_scripts/320_clusters.py diff --git a/startup_scripts/320_vlan_groups.py b/startup_scripts/330_vlan_groups.py similarity index 100% rename from startup_scripts/320_vlan_groups.py rename to startup_scripts/330_vlan_groups.py diff --git a/startup_scripts/330_vlans.py b/startup_scripts/340_vlans.py similarity index 100% rename from startup_scripts/330_vlans.py rename to startup_scripts/340_vlans.py diff --git a/startup_scripts/340_virtual_machines.py b/startup_scripts/350_virtual_machines.py similarity index 100% rename from startup_scripts/340_virtual_machines.py rename to startup_scripts/350_virtual_machines.py diff --git a/startup_scripts/350_virtualization_interfaces.py b/startup_scripts/360_virtualization_interfaces.py similarity index 100% rename from startup_scripts/350_virtualization_interfaces.py rename to startup_scripts/360_virtualization_interfaces.py diff --git a/startup_scripts/360_prefixes.py b/startup_scripts/370_prefixes.py similarity index 100% rename from startup_scripts/360_prefixes.py rename to startup_scripts/370_prefixes.py diff --git a/startup_scripts/370_ip_addresses.py b/startup_scripts/380_ip_addresses.py similarity index 100% rename from startup_scripts/370_ip_addresses.py rename to startup_scripts/380_ip_addresses.py diff --git a/startup_scripts/380_primary_ips.py b/startup_scripts/390_primary_ips.py similarity index 100% rename from startup_scripts/380_primary_ips.py rename to startup_scripts/390_primary_ips.py