|
|
@@ -22,7 +22,7 @@ from extras.models import CustomFieldModel
|
|
|
from extras.rpc import RPC_CLIENTS
|
|
|
from utilities.fields import ColorField, NullableCharField
|
|
|
from utilities.managers import NaturalOrderByManager
|
|
|
-from utilities.models import CreatedUpdatedModel
|
|
|
+from utilities.models import ChangeLoggedModel
|
|
|
from .constants import *
|
|
|
from .fields import ASNField, MACAddressField
|
|
|
from .querysets import InterfaceQuerySet
|
|
|
@@ -33,7 +33,7 @@ from .querysets import InterfaceQuerySet
|
|
|
#
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
|
-class Region(MPTTModel):
|
|
|
+class Region(ChangeLoggedModel, MPTTModel):
|
|
|
"""
|
|
|
Sites can be grouped within geographic Regions.
|
|
|
"""
|
|
|
@@ -53,6 +53,7 @@ class Region(MPTTModel):
|
|
|
unique=True
|
|
|
)
|
|
|
|
|
|
+ serializer = 'dcim.api.serializers.RegionSerializer'
|
|
|
csv_headers = ['name', 'slug', 'parent']
|
|
|
|
|
|
class MPTTMeta:
|
|
|
@@ -81,7 +82,7 @@ class SiteManager(NaturalOrderByManager):
|
|
|
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
|
-class Site(CreatedUpdatedModel, CustomFieldModel):
|
|
|
+class Site(ChangeLoggedModel, CustomFieldModel):
|
|
|
"""
|
|
|
A Site represents a geographic location within a network; typically a building or campus. The optional facility
|
|
|
field can be used to include an external designation, such as a data center name (e.g. Equinix SV6).
|
|
|
@@ -162,13 +163,12 @@ class Site(CreatedUpdatedModel, CustomFieldModel):
|
|
|
objects = SiteManager()
|
|
|
tags = TaggableManager()
|
|
|
|
|
|
+ serializer = 'dcim.api.serializers.SiteSerializer'
|
|
|
csv_headers = [
|
|
|
'name', 'slug', 'status', 'region', 'tenant', 'facility', 'asn', 'time_zone', 'description', 'physical_address',
|
|
|
'shipping_address', 'contact_name', 'contact_phone', 'contact_email', 'comments',
|
|
|
]
|
|
|
|
|
|
- serializer = 'dcim.api.serializers.SiteSerializer'
|
|
|
-
|
|
|
class Meta:
|
|
|
ordering = ['name']
|
|
|
|
|
|
@@ -231,7 +231,7 @@ class Site(CreatedUpdatedModel, CustomFieldModel):
|
|
|
#
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
|
-class RackGroup(models.Model):
|
|
|
+class RackGroup(ChangeLoggedModel):
|
|
|
"""
|
|
|
Racks can be grouped as subsets within a Site. The scope of a group will depend on how Sites are defined. For
|
|
|
example, if a Site spans a corporate campus, a RackGroup might be defined to represent each building within that
|
|
|
@@ -247,9 +247,8 @@ class RackGroup(models.Model):
|
|
|
related_name='rack_groups'
|
|
|
)
|
|
|
|
|
|
- csv_headers = ['site', 'name', 'slug']
|
|
|
-
|
|
|
serializer = 'dcim.api.serializers.RackGroupSerializer'
|
|
|
+ csv_headers = ['site', 'name', 'slug']
|
|
|
|
|
|
class Meta:
|
|
|
ordering = ['site', 'name']
|
|
|
@@ -273,7 +272,7 @@ class RackGroup(models.Model):
|
|
|
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
|
-class RackRole(models.Model):
|
|
|
+class RackRole(ChangeLoggedModel):
|
|
|
"""
|
|
|
Racks can be organized by functional role, similar to Devices.
|
|
|
"""
|
|
|
@@ -286,6 +285,7 @@ class RackRole(models.Model):
|
|
|
)
|
|
|
color = ColorField()
|
|
|
|
|
|
+ serializer = 'dcim.api.serializers.RackRoleSerializer'
|
|
|
csv_headers = ['name', 'slug', 'color']
|
|
|
|
|
|
class Meta:
|
|
|
@@ -310,7 +310,7 @@ class RackManager(NaturalOrderByManager):
|
|
|
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
|
-class Rack(CreatedUpdatedModel, CustomFieldModel):
|
|
|
+class Rack(ChangeLoggedModel, CustomFieldModel):
|
|
|
"""
|
|
|
Devices are housed within Racks. Each rack has a defined height measured in rack units, and a front and rear face.
|
|
|
Each Rack is assigned to a Site and (optionally) a RackGroup.
|
|
|
@@ -392,13 +392,12 @@ class Rack(CreatedUpdatedModel, CustomFieldModel):
|
|
|
objects = RackManager()
|
|
|
tags = TaggableManager()
|
|
|
|
|
|
+ serializer = 'dcim.api.serializers.RackSerializer'
|
|
|
csv_headers = [
|
|
|
'site', 'group_name', 'name', 'facility_id', 'tenant', 'role', 'type', 'serial', 'width', 'u_height',
|
|
|
'desc_units', 'comments',
|
|
|
]
|
|
|
|
|
|
- serializer = 'dcim.api.serializers.RackSerializer'
|
|
|
-
|
|
|
class Meta:
|
|
|
ordering = ['site', 'group', 'name']
|
|
|
unique_together = [
|
|
|
@@ -570,7 +569,7 @@ class Rack(CreatedUpdatedModel, CustomFieldModel):
|
|
|
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
|
-class RackReservation(models.Model):
|
|
|
+class RackReservation(ChangeLoggedModel):
|
|
|
"""
|
|
|
One or more reserved units within a Rack.
|
|
|
"""
|
|
|
@@ -582,9 +581,6 @@ class RackReservation(models.Model):
|
|
|
units = ArrayField(
|
|
|
base_field=models.PositiveSmallIntegerField()
|
|
|
)
|
|
|
- created = models.DateTimeField(
|
|
|
- auto_now_add=True
|
|
|
- )
|
|
|
tenant = models.ForeignKey(
|
|
|
to='tenancy.Tenant',
|
|
|
on_delete=models.PROTECT,
|
|
|
@@ -600,6 +596,8 @@ class RackReservation(models.Model):
|
|
|
max_length=100
|
|
|
)
|
|
|
|
|
|
+ serializer = 'dcim.api.serializers.RackReservationSerializer'
|
|
|
+
|
|
|
class Meta:
|
|
|
ordering = ['created']
|
|
|
|
|
|
@@ -647,7 +645,7 @@ class RackReservation(models.Model):
|
|
|
#
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
|
-class Manufacturer(models.Model):
|
|
|
+class Manufacturer(ChangeLoggedModel):
|
|
|
"""
|
|
|
A Manufacturer represents a company which produces hardware devices; for example, Juniper or Dell.
|
|
|
"""
|
|
|
@@ -659,6 +657,7 @@ class Manufacturer(models.Model):
|
|
|
unique=True
|
|
|
)
|
|
|
|
|
|
+ serializer = 'dcim.api.serializers.ManufacturerSerializer'
|
|
|
csv_headers = ['name', 'slug']
|
|
|
|
|
|
class Meta:
|
|
|
@@ -678,7 +677,7 @@ class Manufacturer(models.Model):
|
|
|
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
|
-class DeviceType(CreatedUpdatedModel, CustomFieldModel):
|
|
|
+class DeviceType(ChangeLoggedModel, CustomFieldModel):
|
|
|
"""
|
|
|
A DeviceType represents a particular make (Manufacturer) and model of device. It specifies rack height and depth, as
|
|
|
well as high-level functional role(s).
|
|
|
@@ -753,6 +752,7 @@ class DeviceType(CreatedUpdatedModel, CustomFieldModel):
|
|
|
|
|
|
tags = TaggableManager()
|
|
|
|
|
|
+ serializer = 'dcim.api.serializers.DeviceTypeSerializer'
|
|
|
csv_headers = [
|
|
|
'manufacturer', 'model', 'slug', 'part_number', 'u_height', 'is_full_depth', 'is_console_server',
|
|
|
'is_pdu', 'is_network_device', 'subdevice_role', 'interface_ordering', 'comments',
|
|
|
@@ -998,7 +998,7 @@ class DeviceBayTemplate(models.Model):
|
|
|
#
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
|
-class DeviceRole(models.Model):
|
|
|
+class DeviceRole(ChangeLoggedModel):
|
|
|
"""
|
|
|
Devices are organized by functional role; for example, "Core Switch" or "File Server". Each DeviceRole is assigned a
|
|
|
color to be used when displaying rack elevations. The vm_role field determines whether the role is applicable to
|
|
|
@@ -1018,6 +1018,7 @@ class DeviceRole(models.Model):
|
|
|
help_text='Virtual machines may be assigned to this role'
|
|
|
)
|
|
|
|
|
|
+ serializer = 'dcim.api.serializers.DeviceRoleSerializer'
|
|
|
csv_headers = ['name', 'slug', 'color', 'vm_role']
|
|
|
|
|
|
class Meta:
|
|
|
@@ -1039,7 +1040,7 @@ class DeviceRole(models.Model):
|
|
|
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
|
-class Platform(models.Model):
|
|
|
+class Platform(ChangeLoggedModel):
|
|
|
"""
|
|
|
Platform refers to the software or firmware running on a Device. For example, "Cisco IOS-XR" or "Juniper Junos".
|
|
|
NetBox uses Platforms to determine how to interact with devices when pulling inventory data or other information by
|
|
|
@@ -1073,6 +1074,7 @@ class Platform(models.Model):
|
|
|
verbose_name='Legacy RPC client'
|
|
|
)
|
|
|
|
|
|
+ serializer = 'dcim.api.serializers.PlatformSerializer'
|
|
|
csv_headers = ['name', 'slug', 'manufacturer', 'napalm_driver']
|
|
|
|
|
|
class Meta:
|
|
|
@@ -1098,7 +1100,7 @@ class DeviceManager(NaturalOrderByManager):
|
|
|
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
|
-class Device(CreatedUpdatedModel, CustomFieldModel):
|
|
|
+class Device(ChangeLoggedModel, CustomFieldModel):
|
|
|
"""
|
|
|
A Device represents a piece of physical hardware mounted within a Rack. Each Device is assigned a DeviceType,
|
|
|
DeviceRole, and (optionally) a Platform. Device names are not required, however if one is set it must be unique.
|
|
|
@@ -1238,13 +1240,12 @@ class Device(CreatedUpdatedModel, CustomFieldModel):
|
|
|
objects = DeviceManager()
|
|
|
tags = TaggableManager()
|
|
|
|
|
|
+ serializer = 'dcim.api.serializers.DeviceSerializer'
|
|
|
csv_headers = [
|
|
|
'name', 'device_role', 'tenant', 'manufacturer', 'model_name', 'platform', 'serial', 'asset_tag', 'status',
|
|
|
'site', 'rack_group', 'rack_name', 'position', 'face', 'comments',
|
|
|
]
|
|
|
|
|
|
- serializer = 'dcim.api.serializers.DeviceSerializer'
|
|
|
-
|
|
|
class Meta:
|
|
|
ordering = ['name']
|
|
|
unique_together = [
|
|
|
@@ -2098,7 +2099,7 @@ class InventoryItem(models.Model):
|
|
|
#
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
|
-class VirtualChassis(models.Model):
|
|
|
+class VirtualChassis(ChangeLoggedModel):
|
|
|
"""
|
|
|
A collection of Devices which operate with a shared control plane (e.g. a switch stack).
|
|
|
"""
|
|
|
@@ -2112,6 +2113,8 @@ class VirtualChassis(models.Model):
|
|
|
blank=True
|
|
|
)
|
|
|
|
|
|
+ serializer = 'dcim.api.serializers.VirtualChassisSerializer'
|
|
|
+
|
|
|
class Meta:
|
|
|
ordering = ['master']
|
|
|
verbose_name_plural = 'virtual chassis'
|