Source code for nsot.models.device

from __future__ import unicode_literals

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 __unicode__(self): return u'%s' % self.hostname class Meta: unique_together = ('site', 'hostname') index_together = unique_together @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 not settings.DEVICE_NAME.match(value): raise exc.ValidationError({ 'name': 'Invalid name: %r.' % value }) return value def clean_fields(self, exclude=None): self.hostname = self.clean_hostname(self.hostname) def save(self, *args, **kwargs): self.full_clean() super(Device, self).save(*args, **kwargs) def to_dict(self): return { 'id': self.id, 'site_id': self.site_id, 'hostname': self.hostname, 'attributes': self.get_attributes(), }