7b914d31d6
The rack 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 racks.yml file as follows: - Rack types must match one of the 5 rack types given, e.g. '4-post-cabinet'. - Rack width must match one of the 2 rack widths given, i.e. '19' or '23'. See the diff of this commit for further information how this is meant.
58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
from dcim.models import Site, RackRole, Rack, RackGroup
|
|
from tenancy.models import Tenant
|
|
from extras.models import CustomField, CustomFieldValue
|
|
from ruamel.yaml import YAML
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
file = Path('/opt/netbox/initializers/racks.yml')
|
|
if not file.is_file():
|
|
sys.exit()
|
|
|
|
with file.open('r') as stream:
|
|
yaml = YAML(typ='safe')
|
|
racks = yaml.load(stream)
|
|
|
|
required_assocs = {
|
|
'site': (Site, 'name')
|
|
}
|
|
|
|
optional_assocs = {
|
|
'role': (RackRole, 'name'),
|
|
'tenant': (Tenant, 'name'),
|
|
'group': (RackGroup, 'name')
|
|
}
|
|
|
|
if racks is not None:
|
|
for params in racks:
|
|
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)
|
|
|
|
for assoc, details in optional_assocs.items():
|
|
if assoc in params:
|
|
model, field = details
|
|
query = { field: params.pop(assoc) }
|
|
|
|
params[assoc] = model.objects.get(**query)
|
|
|
|
rack, created = Rack.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=rack,
|
|
value=cf_value
|
|
)
|
|
|
|
rack.custom_field_values.add(custom_field_value)
|
|
|
|
print("🔳 Created rack", rack.site, rack.name)
|