コード例 #1
0
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")
コード例 #2
0
class Interfaces(Model):
    int_interface = models.CharField(max_length=300,
                                     blank=False,
                                     verbose_name=_("NIC"),
                                     help_text=_("Pick your NIC"))
    int_name = models.CharField(max_length=120,
                                verbose_name=_("Interface Name"),
                                help_text=_("Name your NIC."))
    int_dhcp = models.BooleanField(
        verbose_name=_("DHCP"),
        default=False,
        help_text=_("When enabled, use DHCP to obtain IPv4 address as well"
                    " as default router, etc."),
    )
    int_ipv4address = IPAddressField(
        verbose_name=_("IPv4 Address"),
        blank=True,
        default='',
    )
    int_ipv4address_b = IPAddressField(
        verbose_name=_("IPv4 Address"),
        blank=True,
        default='',
    )
    int_v4netmaskbit = models.CharField(max_length=3,
                                        choices=choices.v4NetmaskBitList,
                                        blank=True,
                                        default='',
                                        verbose_name=_("IPv4 Netmask"),
                                        help_text="")
    int_ipv6auto = models.BooleanField(
        verbose_name=_("Auto configure IPv6"),
        default=False,
        help_text=_("When enabled, automatically configurate IPv6 address "
                    "via rtsol(8)."),
    )
    int_ipv6address = IPAddressField(
        verbose_name=_("IPv6 Address"),
        blank=True,
        default='',
    )
    int_v6netmaskbit = models.CharField(max_length=4,
                                        choices=choices.v6NetmaskBitList,
                                        blank=True,
                                        default='',
                                        verbose_name=_("IPv6 Prefix Length"),
                                        help_text="")
    int_vip = IPAddressField(
        verbose_name=_("Virtual IP"),
        blank=True,
        null=True,
    )
    int_vhid = models.PositiveIntegerField(
        verbose_name=_("Virtual Host ID"),
        null=True,
        blank=True,
    )
    int_pass = models.CharField(
        max_length=100,
        blank=True,
        verbose_name=_("Password"),
        editable=False,
    )
    int_critical = models.BooleanField(
        default=False,
        verbose_name=_("Critical for Failover"),
    )
    int_group = models.IntegerField(
        verbose_name=_('Group'),
        choices=[(i, i) for i in range(1, 33)],
        null=True,
        blank=True,
    )
    int_options = models.CharField(max_length=120,
                                   verbose_name=_("Options"),
                                   blank=True)

    def __str__(self):
        if not self.int_name:
            return self.int_interface
        return str(self.int_name)

    def __init__(self, *args, **kwargs):
        super(Interfaces, self).__init__(*args, **kwargs)
        self._original_int_options = self.int_options

    def delete(self):
        LAGGInterface.objects.filter(lagg_interface__id=self.id).delete()
        # Delete VLAN entries for this interface
        VLAN.objects.filter(vlan_vint=self.int_interface).delete()
        if self.id:
            super(Interfaces, self).delete()
        os.system("sleep 2")
        notifier().start("network")

    def save(self, *args, **kwargs):
        if self.int_vip and not self.int_pass:
            self.int_pass = ''.join([
                random.SystemRandom().choice(string.ascii_letters +
                                             string.digits) for n in range(16)
            ])
        return super(Interfaces, self).save(*args, **kwargs)

    class Meta:
        verbose_name = _("Interface")
        verbose_name_plural = _("Interfaces")
        ordering = ["int_interface"]

    def get_ipv4_addresses(self):
        """
        Includes IPv4 addresses in aliases
        """
        ips = []
        if self.int_ipv4address:
            ips.append("%s/%s" % (
                str(self.int_ipv4address),
                str(self.int_v4netmaskbit),
            ))
        if self.int_ipv4address_b:
            ips.append("%s/%s" % (
                str(self.int_ipv4address_b),
                str(self.int_v4netmaskbit),
            ))
        for alias in self.alias_set.exclude(alias_v4address=''):
            ips.append("%s/%s" % (
                str(alias.alias_v4address),
                str(alias.alias_v4netmaskbit),
            ))
        return ips

    def get_my_ipv4_addresses(self, vip=None):
        """
        Includes IPv4 addresses of this node, aliases of this node,
        and (optionally) VIPs
        """
        ips = []
        _n = notifier()
        if not _n.is_freenas() and _n.failover_node() == 'B':
            if self.int_ipv4address_b:
                ips.append("%s" % str(self.int_ipv4address_b))
            for alias in self.alias_set.exclude(alias_v4address_b=''):
                ips.append("%s" % str(alias.alias_v4address_b))
        else:
            if self.int_ipv4address:
                ips.append("%s" % str(self.int_ipv4address))
            for alias in self.alias_set.exclude(alias_v4address=''):
                ips.append("%s" % str(alias.alias_v4address))
        if vip:
            if self.int_vip:
                ips.append("%s" % str(self.int_vip))
            for alias in self.alias_set.exclude(alias_vip=''):
                ips.append("%s" % str(alias.alias_vip))
        return ips

    def get_ipv6_addresses(self):
        """
        Includes IPv6 addresses in aliases
        """
        ips = []
        if self.int_ipv6address:
            ips.append("%s/%s" % (
                str(self.int_ipv6address),
                str(self.int_v6netmaskbit),
            ))
        for alias in self.alias_set.exclude(alias_v6address=''):
            ips.append("%s/%s" % (
                str(alias.alias_v6address),
                str(alias.alias_v6netmaskbit),
            ))
        return ips

    def get_media_status(self):
        return notifier().iface_media_status(self.int_interface)
コード例 #3
0
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
コード例 #4
0
class Interfaces(Model):
    int_interface = models.CharField(
        max_length=300,
        blank=False,
        verbose_name=_("NIC"),
        help_text=_("Pick your NIC")
    )
    int_name = models.CharField(
        max_length="120",
        verbose_name=_("Interface Name"),
        help_text=_("Name your NIC.")
    )
    int_dhcp = models.BooleanField(
        verbose_name=_("DHCP"),
        default=False,
        help_text=_(
            "When enabled, use DHCP to obtain IPv4 address as well"
            " as default router, etc."
        ),
    )
    int_ipv4address = IPAddressField(
        verbose_name=_("IPv4 Address"),
        blank=True,
        default='',
    )
    int_ipv4address_b = IPAddressField(
        verbose_name=_("IPv4 Address"),
        blank=True,
        default='',
    )
    int_v4netmaskbit = models.CharField(
        max_length=3,
        choices=choices.v4NetmaskBitList,
        blank=True,
        default='',
        verbose_name=_("IPv4 Netmask"),
        help_text=""
    )
    int_ipv6auto = models.BooleanField(
        verbose_name=_("Auto configure IPv6"),
        default=False,
        help_text=_(
            "When enabled, automatically configurate IPv6 address "
            "via rtsol(8)."
        ),
    )
    int_ipv6address = IPAddressField(
        verbose_name=_("IPv6 Address"),
        blank=True,
        default='',
    )
    int_v6netmaskbit = models.CharField(
        max_length=4,
        choices=choices.v6NetmaskBitList,
        blank=True,
        default='',
        verbose_name=_("IPv6 Prefix Length"),
        help_text=""
    )
    int_vip = IPAddressField(
        verbose_name=_("Virtual IP"),
        blank=True,
        null=True,
    )
    int_vhid = models.PositiveIntegerField(
        verbose_name=_("Virtual Host ID"),
        null=True,
        blank=True,
    )
    int_pass = models.CharField(
        max_length=100,
        blank=True,
        verbose_name=_("Password"),
        editable=False,
    )
    int_critical = models.BooleanField(
        default=False,
        verbose_name=_("Critical for Failover"),
    )
    int_group = models.IntegerField(
        verbose_name=_('Group'),
        choices=[(i, i) for i in range(1, 33)],
        null=True,
        blank=True,
    )
    int_options = models.CharField(
        max_length=120,
        verbose_name=_("Options"),
        blank=True
    )

    def __unicode__(self):
        if not self.int_name:
            return self.int_interface
        return u'%s' % self.int_name

    def __init__(self, *args, **kwargs):
        super(Interfaces, self).__init__(*args, **kwargs)
        self._original_int_options = self.int_options

    def delete(self):
        with transaction.atomic():
            for lagg in self.lagginterface_set.all():
                lagg.delete()
            if self.id:
                super(Interfaces, self).delete()
        os.system("sleep 2")
        notifier().start("network")

    def save(self, *args, **kwargs):
        if self.int_vip and not self.int_pass:
            self.int_pass = ''.join([
                random.SystemRandom().choice(
                    string.ascii_letters + string.digits
                )
                for n in xrange(16)
            ])
        super(Interfaces, self).save(*args, **kwargs)
        if self._original_int_options != self.int_options and \
                re.search(r'mtu \d+', self._original_int_options) and \
                self.int_options.find("mtu") == -1:
            notifier().interface_mtu(self.int_interface, "1500")

    class Meta:
        verbose_name = _("Interface")
        verbose_name_plural = _("Interfaces")
        ordering = ["int_interface"]

    def get_ipv4_addresses(self):
        """
        Includes IPv4 addresses in aliases
        """
        ips = []
        if self.int_ipv4address:
            ips.append("%s/%s" % (
                str(self.int_ipv4address),
                str(self.int_v4netmaskbit),
            ))
        if self.int_ipv4address_b:
            ips.append("%s/%s" % (
                str(self.int_ipv4address_b),
                str(self.int_v4netmaskbit),
            ))
        for alias in self.alias_set.exclude(alias_v4address=''):
            ips.append("%s/%s" % (
                str(alias.alias_v4address),
                str(alias.alias_v4netmaskbit),
            ))
        return ips

    def get_ipv6_addresses(self):
        """
        Includes IPv6 addresses in aliases
        """
        ips = []
        if self.int_ipv6address:
            ips.append("%s/%s" % (
                str(self.int_ipv6address),
                str(self.int_v6netmaskbit),
            ))
        for alias in self.alias_set.exclude(alias_v6address=''):
            ips.append("%s/%s" % (
                str(alias.alias_v6address),
                str(alias.alias_v6netmaskbit),
            ))
        return ips

    def get_media_status(self):
        return notifier().iface_media_status(self.int_interface)
コード例 #5
0
class Interfaces(Model):
    int_interface = models.CharField(max_length=300,
                                     blank=False,
                                     verbose_name=_("NIC"),
                                     help_text=_("Pick your NIC"))
    int_name = models.CharField(max_length="120",
                                verbose_name=_("Interface Name"),
                                help_text=_("Name your NIC."))
    int_dhcp = models.BooleanField(
        verbose_name=_("DHCP"),
        help_text=_("When enabled, use DHCP to obtain IPv4 address as well"
                    " as default router, etc."))
    int_ipv4address = IPAddressField(
        verbose_name=_("IPv4 Address"),
        blank=True,
        default='',
    )
    int_v4netmaskbit = models.CharField(max_length=3,
                                        choices=choices.v4NetmaskBitList,
                                        blank=True,
                                        default='',
                                        verbose_name=_("IPv4 Netmask"),
                                        help_text="")
    int_ipv6auto = models.BooleanField(
        verbose_name=_("Auto configure IPv6"),
        help_text=_("When enabled, automatically configurate IPv6 address "
                    "via rtsol(8)."))
    int_ipv6address = IPAddressField(
        verbose_name=_("IPv6 Address"),
        blank=True,
        default='',
    )
    int_v6netmaskbit = models.CharField(max_length=4,
                                        choices=choices.v6NetmaskBitList,
                                        blank=True,
                                        default='',
                                        verbose_name=_("IPv6 Prefix Length"),
                                        help_text="")
    int_options = models.CharField(max_length=120,
                                   verbose_name=_("Options"),
                                   blank=True)

    def __unicode__(self):
        return u'%s' % self.int_name

    def __init__(self, *args, **kwargs):
        super(Interfaces, self).__init__(*args, **kwargs)
        self._original_int_options = self.int_options

    def delete(self):
        with transaction.commit_on_success():
            for lagg in self.lagginterface_set.all():
                lagg.delete()
            if self.id:
                super(Interfaces, self).delete()
        notifier().stop("netif")
        notifier().start("network")

    def save(self, *args, **kwargs):
        super(Interfaces, self).save(*args, **kwargs)
        if self._original_int_options != self.int_options and \
                re.search(r'mtu \d+', self._original_int_options) and \
                self.int_options.find("mtu") == -1:
            notifier().interface_mtu(self.int_interface, "1500")

    class Meta:
        verbose_name = _("Interface")
        verbose_name_plural = _("Interfaces")
        ordering = ["int_interface"]

    def get_ipv4_addresses(self):
        """
        Includes IPv4 addresses in aliases
        """
        ips = []
        if self.int_ipv4address:
            ips.append("%s/%s" % (
                str(self.int_ipv4address),
                str(self.int_v4netmaskbit),
            ))
        for alias in self.alias_set.exclude(alias_v4address=''):
            ips.append("%s/%s" % (
                str(alias.alias_v4address),
                str(alias.alias_v4netmaskbit),
            ))
        return ips

    def get_ipv6_addresses(self):
        """
        Includes IPv6 addresses in aliases
        """
        ips = []
        if self.int_ipv6address:
            ips.append("%s/%s" % (
                str(self.int_ipv6address),
                str(self.int_v6netmaskbit),
            ))
        for alias in self.alias_set.exclude(alias_v6address=''):
            ips.append("%s/%s" % (
                str(alias.alias_v6address),
                str(alias.alias_v6netmaskbit),
            ))
        return ips