class DHCPEntry(TimeTrackable): mac = MACAddressField(verbose_name=_("MAC address"), unique=False) ip = db.CharField(verbose_name=_("IP address"), blank=True, unique=False, default="", max_length=len('xxx.xxx.xxx.xxx')) class Meta: verbose_name = _("DHCP entry") verbose_name_plural = _("DHCP entries")
class Deployment(Auditable): device = db.ForeignKey(Device) mac = MACAddressField() status = db.IntegerField(choices=DeploymentStatus(), default=DeploymentStatus.open.id) ip = db.IPAddressField(verbose_name=_("IP address")) hostname = db.CharField(verbose_name=_("hostname"), max_length=255, unique=True) preboot = db.ForeignKey(Preboot, verbose_name=_("preboot"), null=True, on_delete=db.SET_NULL) venture = db.ForeignKey('business.Venture', verbose_name=_("venture"), null=True, on_delete=db.SET_NULL) venture_role = db.ForeignKey('business.VentureRole', null=True, verbose_name=_("role"), on_delete=db.SET_NULL) done_plugins = db.TextField(verbose_name=_("done plugins"), blank=True, default='') is_running = db.BooleanField( verbose_name=_("is running"), default=False) # a database-level lock for deployment-related tasks puppet_certificate_revoked = db.BooleanField(default=False) class Meta: verbose_name = _("deployment") verbose_name_plural = _("deployments") def create_issue(self): bowner = get_business_owner(self.device) towner = get_technical_owner(self.device) params = dict( ci_uid=CI.get_uid_by_content_object(self.device), description='Please accept in order to continue deployment.', summary='%s - acceptance request for deployment' % unicode(self.device), technical_assignee=towner, business_assignee=bowner, ) super(Deployment, self).create_issue(params, DEFAULT_ASSIGNEE) def synchronize_status(self, new_status): ch = DeploymentStatus.from_id(new_status) transition_id = bugtracker_transition_ids.get(ch.name) self.transition_issue(transition_id)
class Ethernet(Component): label = db.CharField(verbose_name=_("name"), max_length=255) mac = MACAddressField(verbose_name=_("MAC address"), unique=True) speed = db.PositiveIntegerField(verbose_name=_("speed"), choices=EthernetSpeed(), default=EthernetSpeed.unknown.id) class Meta: verbose_name = _("ethernet") verbose_name_plural = _("ethernets") ordering = ('device', 'mac') def __unicode__(self): return '{} ({})'.format(self.label, self.mac)
class DHCPEntry(TimeTrackable): mac = MACAddressField(verbose_name=_("MAC address"), unique=True) ip = db.CharField(verbose_name=_("IP address"), blank=True, unique=False, default="", max_length=len('xxx.xxx.xxx.xxx')) number = db.BigIntegerField( _("IP address"), help_text=_("Presented as int."), editable=False, unique=False, default=0 ) class Meta: verbose_name = _("DHCP entry") verbose_name_plural = _("DHCP entries") def save(self, *args, **kwargs): self.number = int(ipaddr.IPAddress(self.ip)) super(DHCPEntry, self).save(*args, **kwargs)
class AbstractDeployment(db.Model): user = models.ForeignKey('auth.User', verbose_name=_("user"), null=True, blank=True, default=None, on_delete=models.SET_NULL) status_lastchanged = models.DateTimeField( default=datetime.datetime.now, verbose_name=_("last status change"), help_text=_("the date of the last status change"), ) device = db.ForeignKey(Device) mac = MACAddressField() status = db.IntegerField( choices=DeploymentStatus(), default=DeploymentStatus.open.id, ) ip = db.IPAddressField(_("IP address")) preboot = db.ForeignKey( Preboot, verbose_name=_("preboot"), null=True, on_delete=db.SET_NULL, ) venture = db.ForeignKey( 'business.Venture', verbose_name=_("venture"), null=True, on_delete=db.SET_NULL, ) venture_role = db.ForeignKey( 'business.VentureRole', null=True, verbose_name=_("role"), on_delete=db.SET_NULL, ) done_plugins = db.TextField( _("done plugins"), blank=True, default='', ) is_running = db.BooleanField( _("is running"), default=False, ) # a database-level lock for deployment-related tasks mass_deployment = db.ForeignKey( MassDeployment, verbose_name=_("initiated by mass deployment"), null=True, blank=True, default=None, on_delete=models.SET_NULL, editable=False) class Meta: abstract = True def __unicode__(self): return "{} as {}/{} - {}".format( self.hostname, self.venture.path if self.venture else '-', self.venture_role.path if self.venture_role else '-', self.get_status_display(), )