class StaticRoute(Model): sr_destination = models.CharField(max_length=120, verbose_name=_("Destination network")) sr_gateway = IP4AddressField(max_length=120, verbose_name=_("Gateway")) sr_description = models.CharField(max_length=120, verbose_name=_("Description"), blank=True) class Meta: verbose_name = _("Static Route") verbose_name_plural = _("Static Routes") ordering = ["sr_destination", "sr_gateway"] class FreeAdmin: icon_object = "StaticRouteIcon" icon_model = "StaticRouteIcon" icon_add = "AddStaticRouteIcon" icon_view = "ViewAllStaticRoutesIcon" def __str__(self): return self.sr_destination def save(self, *args, **kwargs): super(StaticRoute, self).save(*args, **kwargs) def delete(self, *args, **kwargs): super(StaticRoute, self).delete(*args, **kwargs) try: # TODO: async user notification notifier().staticroute_delete(self) except MiddlewareError: pass
class Alias(Model): alias_interface = models.ForeignKey( Interfaces, verbose_name=_("Interface") ) alias_v4address = IP4AddressField( verbose_name=_("IPv4 Address"), default='', blank=True, ) alias_v4netmaskbit = models.CharField( max_length=3, choices=choices.v4NetmaskBitList, default='', blank=True, verbose_name=_("IPv4 Netmask"), help_text="" ) alias_v6address = IP6AddressField( verbose_name=_("IPv6 Address"), default='', blank=True, ) alias_v6netmaskbit = models.CharField( max_length=3, choices=choices.v6NetmaskBitList, default='', blank=True, verbose_name=_("IPv6 Prefix Length"), help_text="" ) def __unicode__(self): if self.alias_v4address: return u'%s:%s' % ( self.alias_interface.int_name, self.alias_v4address) elif self.alias_v6address: return u'%s:%s' % ( self.alias_interface.int_name, self.alias_v6address) @property def alias_network(self): if self.alias_v4address: return '%s/%s' % (self.alias_v4address, self.alias_v4netmaskbit) else: return '%s/%s' % (self.alias_v6address, self.alias_v6netmaskbit) def delete(self): super(Alias, self).delete() notifier().stop("netif") notifier().start("network") class Meta: verbose_name = _("Alias") verbose_name_plural = _("Aliases") class FreeAdmin: pass
class GlobalConfiguration(Model): gc_hostname = models.CharField( max_length=120, verbose_name=_("Hostname"), default='nas', validators=[RegexValidator(regex=r'^[a-zA-Z\.\-\_0-9]+$', )], ) gc_hostname_b = models.CharField( max_length=120, verbose_name=_("Hostname"), validators=[RegexValidator(regex=r'^[a-zA-Z\.\-\_0-9]+$', )], blank=True, null=True, ) gc_domain = models.CharField( max_length=120, verbose_name=_("Domain"), default='local', validators=[RegexValidator(regex=r'^[a-zA-Z\.\-\_0-9]+$', )], ) gc_ipv4gateway = IP4AddressField( blank=True, default='', verbose_name=_("IPv4 Default Gateway"), ) gc_ipv6gateway = IP6AddressField( blank=True, default='', verbose_name=_("IPv6 Default Gateway"), ) gc_nameserver1 = IPAddressField(blank=True, default='', verbose_name=_("Nameserver 1")) gc_nameserver2 = IPAddressField(default='', blank=True, verbose_name=_("Nameserver 2")) gc_nameserver3 = IPAddressField(default='', blank=True, verbose_name=_("Nameserver 3")) gc_httpproxy = models.CharField( verbose_name=_('HTTP Proxy'), blank=True, max_length=255, ) gc_netwait_enabled = models.BooleanField( verbose_name=_("Enable netwait feature"), help_text=_( "If enabled, delays the start of network-reliant services " "until interface is up and ICMP packets to a destination defined " "in netwait ip list are flowing. Link state is examined first, " "followed by \"pinging\" an IP address to verify network " "usability. If no destination can be reached or timeouts are " "exceeded, network services are started anyway with no guarantee " "that the network is usable."), default=False, ) gc_netwait_ip = models.CharField( verbose_name=_("Netwait IP list"), help_text=_( "Space-delimited list of IP addresses to ping(8). If " "multiple IP addresses are specified, each will be tried until " "one is successful or the list is exhausted. If it is empty the " "default gateway will be used."), blank=True, max_length=300, ) gc_hosts = models.TextField( verbose_name=_("Host name data base"), help_text=_( "This field is appended to /etc/hosts which contains " "information regarding known hosts on the network. hosts(5)"), default='', blank=True, ) def __init__(self, *args, **kwargs): super(GlobalConfiguration, self).__init__(*args, **kwargs) for name in ( 'gc_hostname', 'gc_ipv4gateway', 'gc_ipv6gateway', 'gc_domain', 'gc_nameserver1', 'gc_nameserver2', 'gc_nameserver3', 'gc_httpproxy', ): setattr(self, "_orig_%s" % name, self.__dict__.get(name)) def __str__(self): return str(self.id) def get_hostname(self): _n = notifier() if not _n.is_freenas(): if _n.failover_node() == 'B': return self.gc_hostname_b else: return self.gc_hostname else: return self.gc_hostname def save(self, *args, **kwargs): # See #3437 if self._orig_gc_hostname != self.gc_hostname: try: cifs = CIFS.objects.order_by('-id')[0] cifs.cifs_srv_netbiosname = self.gc_hostname cifs.save() except: pass return super(GlobalConfiguration, self).save(*args, **kwargs) class Meta: verbose_name = _("Global Configuration") verbose_name_plural = _("Global Configuration")
class GlobalConfiguration(Model): gc_hostname = models.CharField(max_length=120, verbose_name=_("Hostname")) gc_domain = models.CharField(max_length=120, verbose_name=_("Domain")) gc_ipv4gateway = IP4AddressField( blank=True, default='', verbose_name=_("IPv4 Default Gateway"), ) gc_ipv6gateway = IP6AddressField( blank=True, default='', verbose_name=_("IPv6 Default Gateway"), ) gc_nameserver1 = IPAddressField(blank=True, default='', verbose_name=_("Nameserver 1")) gc_nameserver2 = IPAddressField(default='', blank=True, verbose_name=_("Nameserver 2")) gc_nameserver3 = IPAddressField(default='', blank=True, verbose_name=_("Nameserver 3")) gc_netwait_enabled = models.BooleanField( verbose_name=_("Enable netwait feature"), help_text=_( "If enabled, delays the start of network-reliant services " "until interface is up and ICMP packets to a destination defined " "in netwait ip list are flowing. Link state is examined first, " "followed by \"pinging\" an IP address to verify network " "usability. If no destination can be reached or timeouts are " "exceeded, network services are started anyway with no guarantee " "that the network is usable."), default=False, ) gc_netwait_ip = models.CharField( verbose_name=_("Netwait IP list"), help_text=_( "Space-delimited list of IP addresses to ping(8). If " "multiple IP addresses are specified, each will be tried until " "one is successful or the list is exhausted. If it is empty the " "default gateway will be used."), blank=True, max_length=300, ) gc_hosts = models.TextField( verbose_name=_("Host name data base"), help_text=_( "This field is appended to /etc/hosts which contains " "information regarding known hosts on the network. hosts(5)"), default='', blank=True, ) def __unicode__(self): return u'%s' % self.id class Meta: verbose_name = _("Global Configuration") verbose_name_plural = _("Global Configuration") class FreeAdmin: deletable = False