74a0e2cf6e
The interface database model has changed in Netbox 2.7. Therefore the initializer code, that was used before, broke. As a user, you will need to update your dcim_interfaces.yml file as follows: - Make sure the type is a value out of the possible choices. See the diff of this commit for further information how this is meant.
45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
from dcim.models import Interface, Device
|
|
from extras.models import CustomField, CustomFieldValue
|
|
from ruamel.yaml import YAML
|
|
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
file = Path('/opt/netbox/initializers/dcim_interfaces.yml')
|
|
if not file.is_file():
|
|
sys.exit()
|
|
|
|
with file.open('r') as stream:
|
|
yaml = YAML(typ='safe')
|
|
interfaces = yaml.load(stream)
|
|
|
|
required_assocs = {
|
|
'device': (Device, 'name')
|
|
}
|
|
|
|
if interfaces is not None:
|
|
for params in interfaces:
|
|
custom_fields = params.pop('custom_fields', None)
|
|
|
|
for assoc, details in required_assocs.items():
|
|
model, field = details
|
|
query = { field: params.pop(assoc) }
|
|
|
|
params[assoc] = model.objects.get(**query)
|
|
|
|
interface, created = Interface.objects.get_or_create(**params)
|
|
|
|
if created:
|
|
if custom_fields is not None:
|
|
for cf_name, cf_value in custom_fields.items():
|
|
custom_field = CustomField.objects.get(name=cf_name)
|
|
custom_field_value = CustomFieldValue.objects.create(
|
|
field=custom_field,
|
|
obj=interface,
|
|
value=cf_value
|
|
)
|
|
|
|
interface.custom_field_values.add(custom_field_value)
|
|
|
|
print("🧷 Created interface", interface.name, interface.device.name)
|