Source code for nsot.models.device

from django.conf import settings
from django.db import models

from .. import exc
from .circuit import Circuit
from .resource import Resource


[docs] class Device(Resource): """Represents a network device.""" hostname = models.CharField( max_length=255, null=False, db_index=True, help_text="The hostname of the Device.", ) site = models.ForeignKey( "Site", db_index=True, related_name="devices", on_delete=models.PROTECT, verbose_name="Site", help_text="Unique ID of the Site this Device is under.", ) def __str__(self): return "%s" % self.hostname class Meta: unique_together = ("site", "hostname") @property def circuits(self): """All circuits related to this Device.""" interfaces = self.interfaces.all() circuits = [] for intf in interfaces: try: circuits.append(intf.circuit) except Circuit.DoesNotExist: continue return circuits def clean_hostname(self, value): if not value: raise exc.ValidationError( {"hostname": "Hostname must be non-zero length string."} ) if len(value) > 253: raise exc.ValidationError( {"hostname": "Hostname exceeds 253-character FQDN limit."} ) if not settings.DEVICE_NAME.match(value): raise exc.ValidationError( {"hostname": "Invalid hostname: %r." % value} ) return value
[docs] def clean_fields(self, exclude=None): self.hostname = self.clean_hostname(self.hostname)
def to_dict(self): return { "id": self.id, "site_id": self.site_id, "hostname": self.hostname, "attributes": self.get_attributes(), }