netbox-plugin-dns 1.1.2__py3-none-any.whl → 1.1.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of netbox-plugin-dns might be problematic. Click here for more details.
- netbox_dns/__init__.py +14 -6
- netbox_dns/api/nested_serializers.py +3 -2
- netbox_dns/api/serializers_/nameserver.py +2 -1
- netbox_dns/api/serializers_/record.py +5 -4
- netbox_dns/api/serializers_/record_template.py +2 -1
- netbox_dns/api/serializers_/view.py +2 -1
- netbox_dns/api/serializers_/zone.py +12 -11
- netbox_dns/api/serializers_/zone_template.py +8 -7
- netbox_dns/api/views.py +9 -4
- netbox_dns/choices/record.py +4 -2
- netbox_dns/choices/zone.py +8 -4
- netbox_dns/fields/address.py +5 -22
- netbox_dns/fields/network.py +2 -1
- netbox_dns/fields/rfc2317.py +7 -3
- netbox_dns/filtersets/nameserver.py +3 -2
- netbox_dns/filtersets/record.py +14 -9
- netbox_dns/filtersets/record_template.py +3 -2
- netbox_dns/filtersets/view.py +3 -2
- netbox_dns/filtersets/zone.py +24 -22
- netbox_dns/filtersets/zone_template.py +15 -14
- netbox_dns/forms/nameserver.py +41 -17
- netbox_dns/forms/record.py +61 -32
- netbox_dns/forms/record_template.py +49 -28
- netbox_dns/forms/registrar.py +21 -17
- netbox_dns/forms/registration_contact.py +37 -25
- netbox_dns/forms/view.py +49 -27
- netbox_dns/forms/zone.py +173 -120
- netbox_dns/forms/zone_template.py +53 -43
- netbox_dns/locale/de/LC_MESSAGES/django.mo +0 -0
- netbox_dns/locale/en/LC_MESSAGES/django.mo +0 -0
- netbox_dns/management/commands/rebuild_dnssync.py +14 -1
- netbox_dns/models/nameserver.py +6 -2
- netbox_dns/models/record.py +74 -40
- netbox_dns/models/record_template.py +17 -9
- netbox_dns/models/registrar.py +11 -7
- netbox_dns/models/registration_contact.py +23 -11
- netbox_dns/models/view.py +15 -6
- netbox_dns/models/zone.py +83 -50
- netbox_dns/models/zone_template.py +12 -10
- netbox_dns/navigation.py +30 -28
- netbox_dns/signals/ipam_dnssync.py +21 -14
- netbox_dns/tables/ipam_dnssync.py +2 -1
- netbox_dns/tables/nameserver.py +2 -0
- netbox_dns/tables/record.py +21 -11
- netbox_dns/tables/record_template.py +12 -5
- netbox_dns/tables/registrar.py +2 -0
- netbox_dns/tables/registration_contact.py +2 -0
- netbox_dns/tables/view.py +3 -1
- netbox_dns/tables/zone.py +15 -2
- netbox_dns/tables/zone_template.py +7 -0
- netbox_dns/templates/netbox_dns/nameserver.html +6 -5
- netbox_dns/templates/netbox_dns/record/managed.html +2 -1
- netbox_dns/templates/netbox_dns/record/related.html +26 -14
- netbox_dns/templates/netbox_dns/record.html +39 -20
- netbox_dns/templates/netbox_dns/recordtemplate.html +27 -15
- netbox_dns/templates/netbox_dns/registrar.html +11 -10
- netbox_dns/templates/netbox_dns/registrationcontact.html +16 -15
- netbox_dns/templates/netbox_dns/view/button.html +2 -1
- netbox_dns/templates/netbox_dns/view/prefix.html +7 -4
- netbox_dns/templates/netbox_dns/view/related.html +26 -10
- netbox_dns/templates/netbox_dns/view.html +11 -14
- netbox_dns/templates/netbox_dns/zone/base.html +2 -1
- netbox_dns/templates/netbox_dns/zone/child.html +3 -2
- netbox_dns/templates/netbox_dns/zone/record.html +3 -2
- netbox_dns/templates/netbox_dns/zone/registration.html +8 -7
- netbox_dns/templates/netbox_dns/zone.html +28 -30
- netbox_dns/templates/netbox_dns/zonetemplate.html +27 -17
- netbox_dns/utilities/ipam_dnssync.py +15 -4
- netbox_dns/validators/dns_name.py +11 -4
- netbox_dns/validators/dns_value.py +55 -9
- netbox_dns/validators/rfc2317.py +6 -3
- netbox_dns/views/nameserver.py +4 -2
- netbox_dns/views/record_template.py +4 -3
- netbox_dns/views/registrar.py +3 -1
- netbox_dns/views/registration_contact.py +2 -1
- netbox_dns/views/view.py +2 -1
- netbox_dns/views/zone.py +6 -4
- netbox_dns/views/zone_template.py +8 -7
- {netbox_plugin_dns-1.1.2.dist-info → netbox_plugin_dns-1.1.4.dist-info}/METADATA +2 -2
- netbox_plugin_dns-1.1.4.dist-info/RECORD +150 -0
- netbox_plugin_dns-1.1.2.dist-info/RECORD +0 -148
- {netbox_plugin_dns-1.1.2.dist-info → netbox_plugin_dns-1.1.4.dist-info}/LICENSE +0 -0
- {netbox_plugin_dns-1.1.2.dist-info → netbox_plugin_dns-1.1.4.dist-info}/WHEEL +0 -0
- {netbox_plugin_dns-1.1.2.dist-info → netbox_plugin_dns-1.1.4.dist-info}/top_level.txt +0 -0
|
@@ -4,6 +4,7 @@ from dns import name as dns_name
|
|
|
4
4
|
from django.core.exceptions import ValidationError
|
|
5
5
|
from django.db import models
|
|
6
6
|
from django.urls import reverse
|
|
7
|
+
from django.utils.translation import gettext_lazy as _
|
|
7
8
|
|
|
8
9
|
from netbox.models import NetBoxModel
|
|
9
10
|
from netbox.search import SearchIndex, register_search
|
|
@@ -23,40 +24,45 @@ __all__ = (
|
|
|
23
24
|
|
|
24
25
|
class RecordTemplate(NetBoxModel):
|
|
25
26
|
name = models.CharField(
|
|
26
|
-
verbose_name="Template
|
|
27
|
+
verbose_name=_("Template Name"),
|
|
27
28
|
unique=True,
|
|
28
29
|
max_length=200,
|
|
29
30
|
)
|
|
30
31
|
record_name = models.CharField(
|
|
31
|
-
verbose_name="Name",
|
|
32
|
+
verbose_name=_("Name"),
|
|
32
33
|
max_length=255,
|
|
33
34
|
)
|
|
34
35
|
description = models.CharField(
|
|
36
|
+
verbose_name=_("Description"),
|
|
35
37
|
max_length=200,
|
|
36
38
|
blank=True,
|
|
37
39
|
)
|
|
38
40
|
type = models.CharField(
|
|
41
|
+
verbose_name=_("Type"),
|
|
39
42
|
choices=RecordTypeChoices,
|
|
40
43
|
)
|
|
41
44
|
value = models.CharField(
|
|
45
|
+
verbose_name=_("Value"),
|
|
42
46
|
max_length=65535,
|
|
43
47
|
)
|
|
44
48
|
status = models.CharField(
|
|
49
|
+
verbose_name=_("Status"),
|
|
45
50
|
choices=RecordStatusChoices,
|
|
46
51
|
default=RecordStatusChoices.STATUS_ACTIVE,
|
|
47
52
|
blank=False,
|
|
48
53
|
)
|
|
49
54
|
ttl = models.PositiveIntegerField(
|
|
50
|
-
verbose_name="TTL",
|
|
55
|
+
verbose_name=_("TTL"),
|
|
51
56
|
null=True,
|
|
52
57
|
blank=True,
|
|
53
58
|
)
|
|
54
59
|
disable_ptr = models.BooleanField(
|
|
55
|
-
verbose_name="Disable PTR",
|
|
56
|
-
help_text="Disable PTR record creation",
|
|
60
|
+
verbose_name=_("Disable PTR"),
|
|
61
|
+
help_text=_("Disable PTR record creation"),
|
|
57
62
|
default=False,
|
|
58
63
|
)
|
|
59
64
|
tenant = models.ForeignKey(
|
|
65
|
+
verbose_name=_("Tenant"),
|
|
60
66
|
to="tenancy.Tenant",
|
|
61
67
|
on_delete=models.PROTECT,
|
|
62
68
|
related_name="+",
|
|
@@ -85,8 +91,8 @@ class RecordTemplate(NetBoxModel):
|
|
|
85
91
|
)
|
|
86
92
|
|
|
87
93
|
class Meta:
|
|
88
|
-
verbose_name = "Record Template"
|
|
89
|
-
verbose_name_plural = "Record Templates"
|
|
94
|
+
verbose_name = _("Record Template")
|
|
95
|
+
verbose_name_plural = _("Record Templates")
|
|
90
96
|
|
|
91
97
|
ordering = ("name",)
|
|
92
98
|
|
|
@@ -131,7 +137,7 @@ class RecordTemplate(NetBoxModel):
|
|
|
131
137
|
|
|
132
138
|
def validate_value(self):
|
|
133
139
|
try:
|
|
134
|
-
validate_record_value(self
|
|
140
|
+
validate_record_value(self)
|
|
135
141
|
except ValidationError as exc:
|
|
136
142
|
raise ValidationError({"value": exc}) from None
|
|
137
143
|
|
|
@@ -155,7 +161,9 @@ class RecordTemplate(NetBoxModel):
|
|
|
155
161
|
record = Record.objects.create(**record_data)
|
|
156
162
|
except ValidationError as exc:
|
|
157
163
|
raise ValidationError(
|
|
158
|
-
|
|
164
|
+
_("Error while processing record template {template}: {error}").format(
|
|
165
|
+
template=self, error=exc.messages[0]
|
|
166
|
+
)
|
|
159
167
|
)
|
|
160
168
|
|
|
161
169
|
if tags := self.tags.all():
|
netbox_dns/models/registrar.py
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from django.db import models
|
|
2
2
|
from django.urls import reverse
|
|
3
|
+
from django.utils.translation import gettext_lazy as _
|
|
3
4
|
|
|
4
5
|
from netbox.models import NetBoxModel
|
|
5
6
|
from netbox.search import SearchIndex, register_search
|
|
@@ -16,38 +17,41 @@ class Registrar(NetBoxModel):
|
|
|
16
17
|
# Data fields according to https://www.icann.org/resources/pages/rdds-labeling-policy-2017-02-01-en
|
|
17
18
|
# -
|
|
18
19
|
name = models.CharField(
|
|
20
|
+
verbose_name=_("Name"),
|
|
19
21
|
unique=True,
|
|
20
22
|
max_length=255,
|
|
21
23
|
)
|
|
22
24
|
description = models.CharField(
|
|
25
|
+
verbose_name=_("Description"),
|
|
23
26
|
blank=True,
|
|
24
27
|
max_length=200,
|
|
25
28
|
)
|
|
26
29
|
iana_id = models.IntegerField(
|
|
27
|
-
verbose_name="IANA ID",
|
|
30
|
+
verbose_name=_("IANA ID"),
|
|
28
31
|
null=True,
|
|
29
32
|
blank=True,
|
|
30
33
|
)
|
|
31
34
|
referral_url = models.URLField(
|
|
32
|
-
verbose_name="Referral URL",
|
|
35
|
+
verbose_name=_("Referral URL"),
|
|
33
36
|
max_length=255,
|
|
34
37
|
blank=True,
|
|
35
38
|
)
|
|
36
39
|
whois_server = models.CharField(
|
|
37
|
-
verbose_name="WHOIS Server",
|
|
40
|
+
verbose_name=_("WHOIS Server"),
|
|
38
41
|
max_length=255,
|
|
39
42
|
blank=True,
|
|
40
43
|
)
|
|
41
44
|
address = models.CharField(
|
|
45
|
+
verbose_name=_("Address"),
|
|
42
46
|
max_length=200,
|
|
43
47
|
blank=True,
|
|
44
48
|
)
|
|
45
49
|
abuse_email = models.EmailField(
|
|
46
|
-
verbose_name="Abuse Email",
|
|
50
|
+
verbose_name=_("Abuse Email"),
|
|
47
51
|
blank=True,
|
|
48
52
|
)
|
|
49
53
|
abuse_phone = models.CharField(
|
|
50
|
-
verbose_name="Abuse Phone",
|
|
54
|
+
verbose_name=_("Abuse Phone"),
|
|
51
55
|
max_length=50,
|
|
52
56
|
blank=True,
|
|
53
57
|
)
|
|
@@ -59,8 +63,8 @@ class Registrar(NetBoxModel):
|
|
|
59
63
|
return str(self.name)
|
|
60
64
|
|
|
61
65
|
class Meta:
|
|
62
|
-
verbose_name = "Registrar"
|
|
63
|
-
verbose_name_plural = "Registrars"
|
|
66
|
+
verbose_name = _("Registrar")
|
|
67
|
+
verbose_name_plural = _("Registrars")
|
|
64
68
|
|
|
65
69
|
ordering = (
|
|
66
70
|
"name",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from django.db import models
|
|
2
2
|
from django.urls import reverse
|
|
3
|
+
from django.utils.translation import gettext_lazy as _
|
|
3
4
|
|
|
4
5
|
from netbox.models import NetBoxModel
|
|
5
6
|
from netbox.search import SearchIndex, register_search
|
|
@@ -18,70 +19,81 @@ class RegistrationContact(NetBoxModel):
|
|
|
18
19
|
# Data fields according to https://www.icann.org/resources/pages/rdds-labeling-policy-2017-02-01-en
|
|
19
20
|
# -
|
|
20
21
|
contact_id = models.CharField(
|
|
21
|
-
verbose_name="Contact ID",
|
|
22
|
+
verbose_name=_("Contact ID"),
|
|
22
23
|
max_length=50,
|
|
23
24
|
unique=True,
|
|
24
25
|
)
|
|
25
26
|
name = models.CharField(
|
|
27
|
+
verbose_name=_("Name"),
|
|
26
28
|
blank=True,
|
|
27
29
|
max_length=100,
|
|
28
30
|
)
|
|
29
31
|
description = models.CharField(
|
|
32
|
+
verbose_name=_("Description"),
|
|
30
33
|
blank=True,
|
|
31
34
|
max_length=200,
|
|
32
35
|
)
|
|
33
36
|
organization = models.CharField(
|
|
37
|
+
verbose_name=_("Organization"),
|
|
34
38
|
blank=True,
|
|
35
39
|
max_length=200,
|
|
36
40
|
)
|
|
37
41
|
street = models.CharField(
|
|
42
|
+
verbose_name=_("Street"),
|
|
38
43
|
blank=True,
|
|
39
44
|
max_length=50,
|
|
40
45
|
)
|
|
41
46
|
city = models.CharField(
|
|
47
|
+
verbose_name=_("City"),
|
|
42
48
|
blank=True,
|
|
43
49
|
max_length=50,
|
|
44
50
|
)
|
|
45
51
|
state_province = models.CharField(
|
|
46
|
-
verbose_name="State/Province",
|
|
52
|
+
verbose_name=_("State/Province"),
|
|
47
53
|
blank=True,
|
|
48
54
|
max_length=255,
|
|
49
55
|
)
|
|
50
56
|
postal_code = models.CharField(
|
|
51
|
-
verbose_name="Postal Code",
|
|
57
|
+
verbose_name=_("Postal Code"),
|
|
52
58
|
blank=True,
|
|
53
59
|
max_length=20,
|
|
54
60
|
)
|
|
55
61
|
country = models.CharField(
|
|
56
|
-
verbose_name="Country (ISO 3166)",
|
|
62
|
+
verbose_name=_("Country (ISO 3166)"),
|
|
57
63
|
blank=True,
|
|
58
64
|
max_length=2,
|
|
59
65
|
)
|
|
60
66
|
phone = models.CharField(
|
|
61
|
-
verbose_name="Phone",
|
|
67
|
+
verbose_name=_("Phone"),
|
|
62
68
|
blank=True,
|
|
63
69
|
max_length=50,
|
|
64
70
|
)
|
|
65
71
|
phone_ext = models.CharField(
|
|
66
|
-
verbose_name="Phone Extension",
|
|
72
|
+
verbose_name=_("Phone Extension"),
|
|
67
73
|
blank=True,
|
|
68
74
|
max_length=50,
|
|
69
75
|
)
|
|
70
76
|
fax = models.CharField(
|
|
71
|
-
verbose_name="Fax",
|
|
77
|
+
verbose_name=_("Fax"),
|
|
72
78
|
blank=True,
|
|
73
79
|
max_length=50,
|
|
74
80
|
)
|
|
75
81
|
fax_ext = models.CharField(
|
|
76
|
-
verbose_name="Fax Extension",
|
|
82
|
+
verbose_name=_("Fax Extension"),
|
|
77
83
|
blank=True,
|
|
78
84
|
max_length=50,
|
|
79
85
|
)
|
|
80
86
|
email = models.EmailField(
|
|
81
|
-
verbose_name="Email",
|
|
87
|
+
verbose_name=_("Email"),
|
|
82
88
|
blank=True,
|
|
83
89
|
)
|
|
84
90
|
|
|
91
|
+
# +
|
|
92
|
+
# TODO: Retained for backwards compatibility with older versions where
|
|
93
|
+
# 'RegistrationContact' was still ambiguously named 'Contact'.
|
|
94
|
+
#
|
|
95
|
+
# Removing it requires a data migration.
|
|
96
|
+
# -
|
|
85
97
|
tags = TaggableManager(
|
|
86
98
|
through="extras.TaggedItem",
|
|
87
99
|
related_name="netbox_dns_contact_set",
|
|
@@ -114,8 +126,8 @@ class RegistrationContact(NetBoxModel):
|
|
|
114
126
|
return self.contact_id
|
|
115
127
|
|
|
116
128
|
class Meta:
|
|
117
|
-
verbose_name = "Registration Contact"
|
|
118
|
-
verbose_name_plural = "Registration Contacts"
|
|
129
|
+
verbose_name = _("Registration Contact")
|
|
130
|
+
verbose_name_plural = _("Registration Contacts")
|
|
119
131
|
|
|
120
132
|
ordering = (
|
|
121
133
|
"name",
|
netbox_dns/models/view.py
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
from django.db import models
|
|
2
2
|
from django.urls import reverse
|
|
3
3
|
from django.core.exceptions import ValidationError
|
|
4
|
+
from django.utils.translation import gettext_lazy as _
|
|
5
|
+
from django.utils.translation import pgettext_lazy as _p
|
|
4
6
|
|
|
5
7
|
from netbox.models import NetBoxModel
|
|
6
8
|
from netbox.models.features import ContactsMixin
|
|
@@ -26,27 +28,32 @@ __all__ = (
|
|
|
26
28
|
|
|
27
29
|
class View(ObjectModificationMixin, ContactsMixin, NetBoxModel):
|
|
28
30
|
name = models.CharField(
|
|
31
|
+
verbose_name=_("Name"),
|
|
29
32
|
unique=True,
|
|
30
33
|
max_length=255,
|
|
31
34
|
)
|
|
32
35
|
description = models.CharField(
|
|
36
|
+
verbose_name=_("Description"),
|
|
33
37
|
max_length=200,
|
|
34
38
|
blank=True,
|
|
35
39
|
)
|
|
36
40
|
default_view = models.BooleanField(
|
|
41
|
+
verbose_name=_("Default View"),
|
|
37
42
|
default=False,
|
|
38
43
|
)
|
|
39
44
|
prefixes = models.ManyToManyField(
|
|
45
|
+
verbose_name=_("IPAM Prefixes"),
|
|
40
46
|
to="ipam.Prefix",
|
|
41
47
|
related_name="netbox_dns_views",
|
|
42
48
|
blank=True,
|
|
43
49
|
)
|
|
44
50
|
ip_address_filter = models.JSONField(
|
|
45
|
-
verbose_name="IP Address Filter",
|
|
51
|
+
verbose_name=_("IP Address Filter"),
|
|
46
52
|
blank=True,
|
|
47
53
|
null=True,
|
|
48
54
|
)
|
|
49
55
|
tenant = models.ForeignKey(
|
|
56
|
+
verbose_name=_("Tenant"),
|
|
50
57
|
to="tenancy.Tenant",
|
|
51
58
|
on_delete=models.PROTECT,
|
|
52
59
|
related_name="netbox_dns_views",
|
|
@@ -70,17 +77,17 @@ class View(ObjectModificationMixin, ContactsMixin, NetBoxModel):
|
|
|
70
77
|
return str(self.name)
|
|
71
78
|
|
|
72
79
|
class Meta:
|
|
73
|
-
verbose_name = "View"
|
|
74
|
-
verbose_name_plural = "Views"
|
|
80
|
+
verbose_name = _p("DNS", "View")
|
|
81
|
+
verbose_name_plural = _p("DNS", "Views")
|
|
75
82
|
|
|
76
83
|
ordering = ("name",)
|
|
77
84
|
|
|
78
85
|
def delete(self, *args, **kwargs):
|
|
79
86
|
if self.default_view:
|
|
80
87
|
if current_request.get() is not None:
|
|
81
|
-
raise AbortRequest("The default view cannot be deleted")
|
|
88
|
+
raise AbortRequest(_("The default view cannot be deleted"))
|
|
82
89
|
|
|
83
|
-
raise ValidationError("The default view cannot be deleted")
|
|
90
|
+
raise ValidationError(_("The default view cannot be deleted"))
|
|
84
91
|
|
|
85
92
|
super().delete(*args, **kwargs)
|
|
86
93
|
|
|
@@ -95,7 +102,9 @@ class View(ObjectModificationMixin, ContactsMixin, NetBoxModel):
|
|
|
95
102
|
):
|
|
96
103
|
raise ValidationError(
|
|
97
104
|
{
|
|
98
|
-
"default_view":
|
|
105
|
+
"default_view": _(
|
|
106
|
+
"Please select a different view as default view to change this setting!"
|
|
107
|
+
)
|
|
99
108
|
}
|
|
100
109
|
)
|
|
101
110
|
|