mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Closes #9893: Move YAML serialization logic for component templates under the individual models
This commit is contained in:
@ -160,6 +160,14 @@ class ConsolePortTemplate(ModularComponentTemplateModel):
|
|||||||
**kwargs
|
**kwargs
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def to_yaml(self):
|
||||||
|
return {
|
||||||
|
'name': self.name,
|
||||||
|
'type': self.type,
|
||||||
|
'label': self.label,
|
||||||
|
'description': self.description,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class ConsoleServerPortTemplate(ModularComponentTemplateModel):
|
class ConsoleServerPortTemplate(ModularComponentTemplateModel):
|
||||||
"""
|
"""
|
||||||
@ -188,6 +196,14 @@ class ConsoleServerPortTemplate(ModularComponentTemplateModel):
|
|||||||
**kwargs
|
**kwargs
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def to_yaml(self):
|
||||||
|
return {
|
||||||
|
'name': self.name,
|
||||||
|
'type': self.type,
|
||||||
|
'label': self.label,
|
||||||
|
'description': self.description,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class PowerPortTemplate(ModularComponentTemplateModel):
|
class PowerPortTemplate(ModularComponentTemplateModel):
|
||||||
"""
|
"""
|
||||||
@ -239,6 +255,16 @@ class PowerPortTemplate(ModularComponentTemplateModel):
|
|||||||
'allocated_draw': f"Allocated draw cannot exceed the maximum draw ({self.maximum_draw}W)."
|
'allocated_draw': f"Allocated draw cannot exceed the maximum draw ({self.maximum_draw}W)."
|
||||||
})
|
})
|
||||||
|
|
||||||
|
def to_yaml(self):
|
||||||
|
return {
|
||||||
|
'name': self.name,
|
||||||
|
'type': self.type,
|
||||||
|
'maximum_draw': self.maximum_draw,
|
||||||
|
'allocated_draw': self.allocated_draw,
|
||||||
|
'label': self.label,
|
||||||
|
'description': self.description,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class PowerOutletTemplate(ModularComponentTemplateModel):
|
class PowerOutletTemplate(ModularComponentTemplateModel):
|
||||||
"""
|
"""
|
||||||
@ -301,6 +327,16 @@ class PowerOutletTemplate(ModularComponentTemplateModel):
|
|||||||
**kwargs
|
**kwargs
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def to_yaml(self):
|
||||||
|
return {
|
||||||
|
'name': self.name,
|
||||||
|
'type': self.type,
|
||||||
|
'power_port': self.power_port.name if self.power_port else None,
|
||||||
|
'feed_leg': self.feed_leg,
|
||||||
|
'label': self.label,
|
||||||
|
'description': self.description,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class InterfaceTemplate(ModularComponentTemplateModel):
|
class InterfaceTemplate(ModularComponentTemplateModel):
|
||||||
"""
|
"""
|
||||||
@ -340,6 +376,15 @@ class InterfaceTemplate(ModularComponentTemplateModel):
|
|||||||
**kwargs
|
**kwargs
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def to_yaml(self):
|
||||||
|
return {
|
||||||
|
'name': self.name,
|
||||||
|
'type': self.type,
|
||||||
|
'mgmt_only': self.mgmt_only,
|
||||||
|
'label': self.label,
|
||||||
|
'description': self.description,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class FrontPortTemplate(ModularComponentTemplateModel):
|
class FrontPortTemplate(ModularComponentTemplateModel):
|
||||||
"""
|
"""
|
||||||
@ -413,6 +458,16 @@ class FrontPortTemplate(ModularComponentTemplateModel):
|
|||||||
**kwargs
|
**kwargs
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def to_yaml(self):
|
||||||
|
return {
|
||||||
|
'name': self.name,
|
||||||
|
'type': self.type,
|
||||||
|
'rear_port': self.rear_port.name,
|
||||||
|
'rear_port_position': self.rear_port_position,
|
||||||
|
'label': self.label,
|
||||||
|
'description': self.description,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class RearPortTemplate(ModularComponentTemplateModel):
|
class RearPortTemplate(ModularComponentTemplateModel):
|
||||||
"""
|
"""
|
||||||
@ -452,6 +507,15 @@ class RearPortTemplate(ModularComponentTemplateModel):
|
|||||||
**kwargs
|
**kwargs
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def to_yaml(self):
|
||||||
|
return {
|
||||||
|
'name': self.name,
|
||||||
|
'type': self.type,
|
||||||
|
'positions': self.positions,
|
||||||
|
'label': self.label,
|
||||||
|
'description': self.description,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class ModuleBayTemplate(ComponentTemplateModel):
|
class ModuleBayTemplate(ComponentTemplateModel):
|
||||||
"""
|
"""
|
||||||
@ -477,6 +541,14 @@ class ModuleBayTemplate(ComponentTemplateModel):
|
|||||||
position=self.position
|
position=self.position
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def to_yaml(self):
|
||||||
|
return {
|
||||||
|
'name': self.name,
|
||||||
|
'label': self.label,
|
||||||
|
'position': self.position,
|
||||||
|
'description': self.description,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class DeviceBayTemplate(ComponentTemplateModel):
|
class DeviceBayTemplate(ComponentTemplateModel):
|
||||||
"""
|
"""
|
||||||
@ -501,6 +573,13 @@ class DeviceBayTemplate(ComponentTemplateModel):
|
|||||||
f"Subdevice role of device type ({self.device_type}) must be set to \"parent\" to allow device bays."
|
f"Subdevice role of device type ({self.device_type}) must be set to \"parent\" to allow device bays."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def to_yaml(self):
|
||||||
|
return {
|
||||||
|
'name': self.name,
|
||||||
|
'label': self.label,
|
||||||
|
'description': self.description,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class InventoryItemTemplate(MPTTModel, ComponentTemplateModel):
|
class InventoryItemTemplate(MPTTModel, ComponentTemplateModel):
|
||||||
"""
|
"""
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
from collections import OrderedDict
|
|
||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
from django.contrib.contenttypes.fields import GenericRelation
|
from django.contrib.contenttypes.fields import GenericRelation
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
@ -161,115 +159,54 @@ class DeviceType(NetBoxModel):
|
|||||||
return reverse('dcim:devicetype', args=[self.pk])
|
return reverse('dcim:devicetype', args=[self.pk])
|
||||||
|
|
||||||
def to_yaml(self):
|
def to_yaml(self):
|
||||||
data = OrderedDict((
|
data = {
|
||||||
('manufacturer', self.manufacturer.name),
|
'manufacturer': self.manufacturer.name,
|
||||||
('model', self.model),
|
'model': self.model,
|
||||||
('slug', self.slug),
|
'slug': self.slug,
|
||||||
('part_number', self.part_number),
|
'part_number': self.part_number,
|
||||||
('u_height', self.u_height),
|
'u_height': self.u_height,
|
||||||
('is_full_depth', self.is_full_depth),
|
'is_full_depth': self.is_full_depth,
|
||||||
('subdevice_role', self.subdevice_role),
|
'subdevice_role': self.subdevice_role,
|
||||||
('airflow', self.airflow),
|
'airflow': self.airflow,
|
||||||
('comments', self.comments),
|
'comments': self.comments,
|
||||||
))
|
}
|
||||||
|
|
||||||
# Component templates
|
# Component templates
|
||||||
if self.consoleporttemplates.exists():
|
if self.consoleporttemplates.exists():
|
||||||
data['console-ports'] = [
|
data['console-ports'] = [
|
||||||
{
|
c.to_yaml() for c in self.consoleporttemplates.all()
|
||||||
'name': c.name,
|
|
||||||
'type': c.type,
|
|
||||||
'label': c.label,
|
|
||||||
'description': c.description,
|
|
||||||
}
|
|
||||||
for c in self.consoleporttemplates.all()
|
|
||||||
]
|
]
|
||||||
if self.consoleserverporttemplates.exists():
|
if self.consoleserverporttemplates.exists():
|
||||||
data['console-server-ports'] = [
|
data['console-server-ports'] = [
|
||||||
{
|
c.to_yaml() for c in self.consoleserverporttemplates.all()
|
||||||
'name': c.name,
|
|
||||||
'type': c.type,
|
|
||||||
'label': c.label,
|
|
||||||
'description': c.description,
|
|
||||||
}
|
|
||||||
for c in self.consoleserverporttemplates.all()
|
|
||||||
]
|
]
|
||||||
if self.powerporttemplates.exists():
|
if self.powerporttemplates.exists():
|
||||||
data['power-ports'] = [
|
data['power-ports'] = [
|
||||||
{
|
c.to_yaml() for c in self.powerporttemplates.all()
|
||||||
'name': c.name,
|
|
||||||
'type': c.type,
|
|
||||||
'maximum_draw': c.maximum_draw,
|
|
||||||
'allocated_draw': c.allocated_draw,
|
|
||||||
'label': c.label,
|
|
||||||
'description': c.description,
|
|
||||||
}
|
|
||||||
for c in self.powerporttemplates.all()
|
|
||||||
]
|
]
|
||||||
if self.poweroutlettemplates.exists():
|
if self.poweroutlettemplates.exists():
|
||||||
data['power-outlets'] = [
|
data['power-outlets'] = [
|
||||||
{
|
c.to_yaml() for c in self.poweroutlettemplates.all()
|
||||||
'name': c.name,
|
|
||||||
'type': c.type,
|
|
||||||
'power_port': c.power_port.name if c.power_port else None,
|
|
||||||
'feed_leg': c.feed_leg,
|
|
||||||
'label': c.label,
|
|
||||||
'description': c.description,
|
|
||||||
}
|
|
||||||
for c in self.poweroutlettemplates.all()
|
|
||||||
]
|
]
|
||||||
if self.interfacetemplates.exists():
|
if self.interfacetemplates.exists():
|
||||||
data['interfaces'] = [
|
data['interfaces'] = [
|
||||||
{
|
c.to_yaml() for c in self.interfacetemplates.all()
|
||||||
'name': c.name,
|
|
||||||
'type': c.type,
|
|
||||||
'mgmt_only': c.mgmt_only,
|
|
||||||
'label': c.label,
|
|
||||||
'description': c.description,
|
|
||||||
}
|
|
||||||
for c in self.interfacetemplates.all()
|
|
||||||
]
|
]
|
||||||
if self.frontporttemplates.exists():
|
if self.frontporttemplates.exists():
|
||||||
data['front-ports'] = [
|
data['front-ports'] = [
|
||||||
{
|
c.to_yaml() for c in self.frontporttemplates.all()
|
||||||
'name': c.name,
|
|
||||||
'type': c.type,
|
|
||||||
'rear_port': c.rear_port.name,
|
|
||||||
'rear_port_position': c.rear_port_position,
|
|
||||||
'label': c.label,
|
|
||||||
'description': c.description,
|
|
||||||
}
|
|
||||||
for c in self.frontporttemplates.all()
|
|
||||||
]
|
]
|
||||||
if self.rearporttemplates.exists():
|
if self.rearporttemplates.exists():
|
||||||
data['rear-ports'] = [
|
data['rear-ports'] = [
|
||||||
{
|
c.to_yaml() for c in self.rearporttemplates.all()
|
||||||
'name': c.name,
|
|
||||||
'type': c.type,
|
|
||||||
'positions': c.positions,
|
|
||||||
'label': c.label,
|
|
||||||
'description': c.description,
|
|
||||||
}
|
|
||||||
for c in self.rearporttemplates.all()
|
|
||||||
]
|
]
|
||||||
if self.modulebaytemplates.exists():
|
if self.modulebaytemplates.exists():
|
||||||
data['module-bays'] = [
|
data['module-bays'] = [
|
||||||
{
|
c.to_yaml() for c in self.modulebaytemplates.all()
|
||||||
'name': c.name,
|
|
||||||
'label': c.label,
|
|
||||||
'position': c.position,
|
|
||||||
'description': c.description,
|
|
||||||
}
|
|
||||||
for c in self.modulebaytemplates.all()
|
|
||||||
]
|
]
|
||||||
if self.devicebaytemplates.exists():
|
if self.devicebaytemplates.exists():
|
||||||
data['device-bays'] = [
|
data['device-bays'] = [
|
||||||
{
|
c.to_yaml() for c in self.devicebaytemplates.all()
|
||||||
'name': c.name,
|
|
||||||
'label': c.label,
|
|
||||||
'description': c.description,
|
|
||||||
}
|
|
||||||
for c in self.devicebaytemplates.all()
|
|
||||||
]
|
]
|
||||||
|
|
||||||
return yaml.dump(dict(data), sort_keys=False)
|
return yaml.dump(dict(data), sort_keys=False)
|
||||||
@ -395,91 +332,41 @@ class ModuleType(NetBoxModel):
|
|||||||
return reverse('dcim:moduletype', args=[self.pk])
|
return reverse('dcim:moduletype', args=[self.pk])
|
||||||
|
|
||||||
def to_yaml(self):
|
def to_yaml(self):
|
||||||
data = OrderedDict((
|
data = {
|
||||||
('manufacturer', self.manufacturer.name),
|
'manufacturer': self.manufacturer.name,
|
||||||
('model', self.model),
|
'model': self.model,
|
||||||
('part_number', self.part_number),
|
'part_number': self.part_number,
|
||||||
('comments', self.comments),
|
'comments': self.comments,
|
||||||
))
|
}
|
||||||
|
|
||||||
# Component templates
|
# Component templates
|
||||||
if self.consoleporttemplates.exists():
|
if self.consoleporttemplates.exists():
|
||||||
data['console-ports'] = [
|
data['console-ports'] = [
|
||||||
{
|
c.to_yaml() for c in self.consoleporttemplates.all()
|
||||||
'name': c.name,
|
|
||||||
'type': c.type,
|
|
||||||
'label': c.label,
|
|
||||||
'description': c.description,
|
|
||||||
}
|
|
||||||
for c in self.consoleporttemplates.all()
|
|
||||||
]
|
]
|
||||||
if self.consoleserverporttemplates.exists():
|
if self.consoleserverporttemplates.exists():
|
||||||
data['console-server-ports'] = [
|
data['console-server-ports'] = [
|
||||||
{
|
c.to_yaml() for c in self.consoleserverporttemplates.all()
|
||||||
'name': c.name,
|
|
||||||
'type': c.type,
|
|
||||||
'label': c.label,
|
|
||||||
'description': c.description,
|
|
||||||
}
|
|
||||||
for c in self.consoleserverporttemplates.all()
|
|
||||||
]
|
]
|
||||||
if self.powerporttemplates.exists():
|
if self.powerporttemplates.exists():
|
||||||
data['power-ports'] = [
|
data['power-ports'] = [
|
||||||
{
|
c.to_yaml() for c in self.powerporttemplates.all()
|
||||||
'name': c.name,
|
|
||||||
'type': c.type,
|
|
||||||
'maximum_draw': c.maximum_draw,
|
|
||||||
'allocated_draw': c.allocated_draw,
|
|
||||||
'label': c.label,
|
|
||||||
'description': c.description,
|
|
||||||
}
|
|
||||||
for c in self.powerporttemplates.all()
|
|
||||||
]
|
]
|
||||||
if self.poweroutlettemplates.exists():
|
if self.poweroutlettemplates.exists():
|
||||||
data['power-outlets'] = [
|
data['power-outlets'] = [
|
||||||
{
|
c.to_yaml() for c in self.poweroutlettemplates.all()
|
||||||
'name': c.name,
|
|
||||||
'type': c.type,
|
|
||||||
'power_port': c.power_port.name if c.power_port else None,
|
|
||||||
'feed_leg': c.feed_leg,
|
|
||||||
'label': c.label,
|
|
||||||
'description': c.description,
|
|
||||||
}
|
|
||||||
for c in self.poweroutlettemplates.all()
|
|
||||||
]
|
]
|
||||||
if self.interfacetemplates.exists():
|
if self.interfacetemplates.exists():
|
||||||
data['interfaces'] = [
|
data['interfaces'] = [
|
||||||
{
|
c.to_yaml() for c in self.interfacetemplates.all()
|
||||||
'name': c.name,
|
|
||||||
'type': c.type,
|
|
||||||
'mgmt_only': c.mgmt_only,
|
|
||||||
'label': c.label,
|
|
||||||
'description': c.description,
|
|
||||||
}
|
|
||||||
for c in self.interfacetemplates.all()
|
|
||||||
]
|
]
|
||||||
if self.frontporttemplates.exists():
|
if self.frontporttemplates.exists():
|
||||||
data['front-ports'] = [
|
data['front-ports'] = [
|
||||||
{
|
c.to_yaml() for c in self.frontporttemplates.all()
|
||||||
'name': c.name,
|
|
||||||
'type': c.type,
|
|
||||||
'rear_port': c.rear_port.name,
|
|
||||||
'rear_port_position': c.rear_port_position,
|
|
||||||
'label': c.label,
|
|
||||||
'description': c.description,
|
|
||||||
}
|
|
||||||
for c in self.frontporttemplates.all()
|
|
||||||
]
|
]
|
||||||
if self.rearporttemplates.exists():
|
if self.rearporttemplates.exists():
|
||||||
data['rear-ports'] = [
|
data['rear-ports'] = [
|
||||||
{
|
c.to_yaml() for c in self.rearporttemplates.all()
|
||||||
'name': c.name,
|
|
||||||
'type': c.type,
|
|
||||||
'positions': c.positions,
|
|
||||||
'label': c.label,
|
|
||||||
'description': c.description,
|
|
||||||
}
|
|
||||||
for c in self.rearporttemplates.all()
|
|
||||||
]
|
]
|
||||||
|
|
||||||
return yaml.dump(dict(data), sort_keys=False)
|
return yaml.dump(dict(data), sort_keys=False)
|
||||||
|
Reference in New Issue
Block a user