netbox-plugin-dns 0.22.9__py3-none-any.whl → 1.0b1__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 +3 -14
- netbox_dns/api/nested_serializers.py +4 -60
- netbox_dns/api/serializers.py +8 -314
- netbox_dns/api/serializers_/__init__.py +0 -0
- netbox_dns/api/serializers_/contact.py +37 -0
- netbox_dns/api/serializers_/nameserver.py +39 -0
- netbox_dns/api/serializers_/record.py +90 -0
- netbox_dns/api/serializers_/registrar.py +31 -0
- netbox_dns/api/serializers_/view.py +29 -0
- netbox_dns/api/serializers_/zone.py +170 -0
- netbox_dns/api/views.py +13 -13
- netbox_dns/fields/network.py +1 -1
- netbox_dns/fields/rfc2317.py +1 -1
- netbox_dns/{filters → filtersets}/contact.py +2 -1
- netbox_dns/filtersets/nameserver.py +37 -0
- netbox_dns/{filters → filtersets}/record.py +51 -6
- netbox_dns/{filters → filtersets}/registrar.py +2 -1
- netbox_dns/{filters → filtersets}/view.py +2 -2
- netbox_dns/filtersets/zone.py +205 -0
- netbox_dns/forms/contact.py +61 -33
- netbox_dns/forms/nameserver.py +21 -8
- netbox_dns/forms/record.py +35 -36
- netbox_dns/forms/registrar.py +45 -15
- netbox_dns/forms/view.py +19 -8
- netbox_dns/forms/zone.py +112 -87
- netbox_dns/graphql/__init__.py +17 -27
- netbox_dns/graphql/filters.py +49 -0
- netbox_dns/graphql/schema.py +66 -7
- netbox_dns/graphql/types.py +146 -0
- netbox_dns/management/commands/cleanup_database.py +0 -4
- netbox_dns/management/commands/cleanup_rrset_ttl.py +3 -5
- netbox_dns/management/commands/setup_coupling.py +15 -15
- netbox_dns/management/commands/update_soa.py +1 -1
- netbox_dns/migrations/0001_squashed_netbox_dns_0_15.py +0 -27
- netbox_dns/migrations/0001_squashed_netbox_dns_0_22.py +556 -0
- netbox_dns/migrations/{0013_add_nameserver_zone_record_description.py → 0002_contact_description_registrar_description.py} +4 -9
- netbox_dns/migrations/0020_netbox_3_4.py +1 -1
- netbox_dns/models/contact.py +6 -1
- netbox_dns/models/nameserver.py +3 -3
- netbox_dns/models/record.py +8 -15
- netbox_dns/models/registrar.py +5 -1
- netbox_dns/models/view.py +1 -1
- netbox_dns/models/zone.py +6 -9
- netbox_dns/navigation.py +1 -15
- netbox_dns/signals/ipam_coupling.py +3 -8
- netbox_dns/tables/contact.py +1 -0
- netbox_dns/tables/nameserver.py +0 -2
- netbox_dns/tables/registrar.py +1 -0
- netbox_dns/template_content.py +3 -7
- netbox_dns/templates/netbox_dns/contact.html +60 -56
- netbox_dns/templates/netbox_dns/nameserver.html +27 -27
- netbox_dns/templates/netbox_dns/record.html +92 -94
- netbox_dns/templates/netbox_dns/registrar.html +38 -36
- netbox_dns/templates/netbox_dns/view.html +21 -21
- netbox_dns/templates/netbox_dns/zone/base.html +5 -3
- netbox_dns/templates/netbox_dns/zone/child.html +3 -3
- netbox_dns/templates/netbox_dns/zone/managed_record.html +1 -1
- netbox_dns/templates/netbox_dns/zone/record.html +3 -3
- netbox_dns/templates/netbox_dns/zone/registration.html +26 -27
- netbox_dns/templates/netbox_dns/zone/rfc2317_child_zone.html +1 -1
- netbox_dns/templates/netbox_dns/zone.html +150 -149
- netbox_dns/utilities/__init__.py +1 -6
- netbox_dns/utilities/ipam_coupling.py +2 -7
- netbox_dns/validators/dns_name.py +4 -9
- netbox_dns/validators/rfc2317.py +2 -2
- netbox_dns/views/contact.py +4 -4
- netbox_dns/views/nameserver.py +5 -5
- netbox_dns/views/record.py +19 -12
- netbox_dns/views/registrar.py +4 -4
- netbox_dns/views/view.py +4 -4
- netbox_dns/views/zone.py +7 -8
- {netbox_plugin_dns-0.22.9.dist-info → netbox_plugin_dns-1.0b1.dist-info}/METADATA +5 -7
- netbox_plugin_dns-1.0b1.dist-info/RECORD +103 -0
- netbox_dns/filters/nameserver.py +0 -18
- netbox_dns/filters/zone.py +0 -112
- netbox_dns/graphql/contact.py +0 -19
- netbox_dns/graphql/nameserver.py +0 -19
- netbox_dns/graphql/record.py +0 -19
- netbox_dns/graphql/registrar.py +0 -19
- netbox_dns/graphql/view.py +0 -19
- netbox_dns/graphql/zone.py +0 -19
- netbox_dns/migrations/0001_initial.py +0 -115
- netbox_dns/migrations/0002_zone_default_ttl.py +0 -18
- netbox_dns/migrations/0003_soa_managed_records.py +0 -112
- netbox_dns/migrations/0004_create_ptr_for_a_aaaa_records.py +0 -80
- netbox_dns/migrations/0005_update_ns_records.py +0 -41
- netbox_dns/migrations/0006_zone_soa_serial_auto.py +0 -29
- netbox_dns/migrations/0007_alter_zone_soa_serial_auto.py +0 -17
- netbox_dns/migrations/0008_zone_status_names.py +0 -21
- netbox_dns/migrations/0009_netbox32.py +0 -71
- netbox_dns/migrations/0010_update_soa_records.py +0 -58
- netbox_dns/migrations/0011_add_view_model.py +0 -70
- netbox_dns/migrations/0012_adjust_zone_and_record.py +0 -17
- netbox_dns/migrations/0014_add_view_description.py +0 -16
- netbox_dns/migrations/0015_add_record_status.py +0 -17
- netbox_dns/migrations/0016_cleanup_ptr_records.py +0 -38
- netbox_dns/migrations/0017_alter_record_ttl.py +0 -17
- netbox_dns/migrations/0018_zone_arpa_network.py +0 -51
- netbox_dns/migrations/0019_update_ns_ttl.py +0 -19
- netbox_plugin_dns-0.22.9.dist-info/RECORD +0 -117
- /netbox_dns/{filters → filtersets}/__init__.py +0 -0
- {netbox_plugin_dns-0.22.9.dist-info → netbox_plugin_dns-1.0b1.dist-info}/LICENSE +0 -0
- {netbox_plugin_dns-0.22.9.dist-info → netbox_plugin_dns-1.0b1.dist-info}/WHEEL +0 -0
netbox_dns/models/record.py
CHANGED
|
@@ -7,7 +7,6 @@ from dns import name as dns_name
|
|
|
7
7
|
from django.core.exceptions import ValidationError
|
|
8
8
|
from django.db import transaction, models
|
|
9
9
|
from django.db.models import Q, ExpressionWrapper, BooleanField, Min
|
|
10
|
-
from django.db.models.functions import Length
|
|
11
10
|
from django.urls import reverse
|
|
12
11
|
|
|
13
12
|
from netbox.models import NetBoxModel
|
|
@@ -15,12 +14,7 @@ from netbox.search import SearchIndex, register_search
|
|
|
15
14
|
from utilities.querysets import RestrictedQuerySet
|
|
16
15
|
from utilities.choices import ChoiceSet
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
# NetBox 3.5.0 - 3.5.7, 3.5.9+
|
|
20
|
-
from extras.plugins import get_plugin_config
|
|
21
|
-
except ImportError:
|
|
22
|
-
# NetBox 3.5.8
|
|
23
|
-
from extras.plugins.utils import get_plugin_config
|
|
17
|
+
from netbox.plugins.utils import get_plugin_config
|
|
24
18
|
|
|
25
19
|
from netbox_dns.fields import AddressField
|
|
26
20
|
from netbox_dns.utilities import (
|
|
@@ -43,7 +37,9 @@ def min_ttl(*ttl_list):
|
|
|
43
37
|
|
|
44
38
|
|
|
45
39
|
class RecordManager(models.Manager.from_queryset(RestrictedQuerySet)):
|
|
46
|
-
"""
|
|
40
|
+
"""
|
|
41
|
+
Custom manager for records providing the activity status annotation
|
|
42
|
+
"""
|
|
47
43
|
|
|
48
44
|
def get_queryset(self):
|
|
49
45
|
return (
|
|
@@ -218,7 +214,7 @@ class Record(NetBoxModel):
|
|
|
218
214
|
name = dns_name.from_text(self.fqdn).relativize(dns_name.root).to_unicode()
|
|
219
215
|
except dns_name.IDNAException:
|
|
220
216
|
name = self.name
|
|
221
|
-
except dns_name.LabelTooLong
|
|
217
|
+
except dns_name.LabelTooLong:
|
|
222
218
|
name = f"{self.name[:59]}..."
|
|
223
219
|
|
|
224
220
|
return f"{name} [{self.type}]"
|
|
@@ -231,7 +227,7 @@ class Record(NetBoxModel):
|
|
|
231
227
|
return RecordStatusChoices.colors.get(self.status)
|
|
232
228
|
|
|
233
229
|
def get_absolute_url(self):
|
|
234
|
-
return reverse("plugins:netbox_dns:record", kwargs={"pk": self.
|
|
230
|
+
return reverse("plugins:netbox_dns:record", kwargs={"pk": self.pk})
|
|
235
231
|
|
|
236
232
|
@property
|
|
237
233
|
def value_fqdn(self):
|
|
@@ -669,7 +665,7 @@ class Record(NetBoxModel):
|
|
|
669
665
|
if self.type == RecordTypeChoices.SOA and self.name != "@":
|
|
670
666
|
raise ValidationError(
|
|
671
667
|
{
|
|
672
|
-
"name":
|
|
668
|
+
"name": "SOA records are only allowed with name @ and are created automatically by NetBox DNS"
|
|
673
669
|
}
|
|
674
670
|
) from None
|
|
675
671
|
|
|
@@ -699,8 +695,6 @@ class Record(NetBoxModel):
|
|
|
699
695
|
}
|
|
700
696
|
) from None
|
|
701
697
|
|
|
702
|
-
super().clean(*args, **kwargs)
|
|
703
|
-
|
|
704
698
|
def save(
|
|
705
699
|
self,
|
|
706
700
|
*args,
|
|
@@ -760,8 +754,7 @@ class Record(NetBoxModel):
|
|
|
760
754
|
class RecordIndex(SearchIndex):
|
|
761
755
|
model = Record
|
|
762
756
|
fields = (
|
|
763
|
-
("
|
|
764
|
-
("name", 120),
|
|
757
|
+
("name", 100),
|
|
765
758
|
("value", 150),
|
|
766
759
|
("zone", 200),
|
|
767
760
|
("type", 200),
|
netbox_dns/models/registrar.py
CHANGED
|
@@ -13,6 +13,10 @@ class Registrar(NetBoxModel):
|
|
|
13
13
|
unique=True,
|
|
14
14
|
max_length=255,
|
|
15
15
|
)
|
|
16
|
+
description = models.CharField(
|
|
17
|
+
blank=True,
|
|
18
|
+
max_length=200,
|
|
19
|
+
)
|
|
16
20
|
iana_id = models.IntegerField(
|
|
17
21
|
verbose_name="IANA ID",
|
|
18
22
|
null=True,
|
|
@@ -43,7 +47,7 @@ class Registrar(NetBoxModel):
|
|
|
43
47
|
)
|
|
44
48
|
|
|
45
49
|
def get_absolute_url(self):
|
|
46
|
-
return reverse("plugins:netbox_dns:registrar", kwargs={"pk": self.
|
|
50
|
+
return reverse("plugins:netbox_dns:registrar", kwargs={"pk": self.pk})
|
|
47
51
|
|
|
48
52
|
def __str__(self):
|
|
49
53
|
return str(self.name)
|
netbox_dns/models/view.py
CHANGED
|
@@ -25,7 +25,7 @@ class View(NetBoxModel):
|
|
|
25
25
|
clone_fields = ["name", "description"]
|
|
26
26
|
|
|
27
27
|
def get_absolute_url(self):
|
|
28
|
-
return reverse("plugins:netbox_dns:view", kwargs={"pk": self.
|
|
28
|
+
return reverse("plugins:netbox_dns:view", kwargs={"pk": self.pk})
|
|
29
29
|
|
|
30
30
|
def __str__(self):
|
|
31
31
|
return str(self.name)
|
netbox_dns/models/zone.py
CHANGED
|
@@ -22,12 +22,7 @@ from utilities.querysets import RestrictedQuerySet
|
|
|
22
22
|
from utilities.choices import ChoiceSet
|
|
23
23
|
from ipam.models import IPAddress
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
# NetBox 3.5.0 - 3.5.7, 3.5.9+
|
|
27
|
-
from extras.plugins import get_plugin_config
|
|
28
|
-
except ImportError:
|
|
29
|
-
# NetBox 3.5.8
|
|
30
|
-
from extras.plugins.utils import get_plugin_config
|
|
25
|
+
from netbox.plugins.utils import get_plugin_config
|
|
31
26
|
|
|
32
27
|
from netbox_dns.fields import NetworkField, RFC2317NetworkField
|
|
33
28
|
from netbox_dns.utilities import (
|
|
@@ -48,7 +43,9 @@ import netbox_dns.models.record as record
|
|
|
48
43
|
|
|
49
44
|
|
|
50
45
|
class ZoneManager(models.Manager.from_queryset(RestrictedQuerySet)):
|
|
51
|
-
"""
|
|
46
|
+
"""
|
|
47
|
+
Custom manager for zones providing the activity status annotation
|
|
48
|
+
"""
|
|
52
49
|
|
|
53
50
|
def get_queryset(self):
|
|
54
51
|
return (
|
|
@@ -455,7 +452,7 @@ class Zone(NetBoxModel):
|
|
|
455
452
|
return ns_warnings, ns_errors
|
|
456
453
|
|
|
457
454
|
def get_auto_serial(self):
|
|
458
|
-
records = record.Record.objects.filter(
|
|
455
|
+
records = record.Record.objects.filter(zone_id=self.pk).exclude(
|
|
459
456
|
type=record.RecordTypeChoices.SOA
|
|
460
457
|
)
|
|
461
458
|
if records:
|
|
@@ -603,7 +600,7 @@ class Zone(NetBoxModel):
|
|
|
603
600
|
if self.arpa_network is not None:
|
|
604
601
|
raise ValidationError(
|
|
605
602
|
{
|
|
606
|
-
"rfc2317_prefix":
|
|
603
|
+
"rfc2317_prefix": "A regular reverse zone can not be used as an RFC2317 zone."
|
|
607
604
|
}
|
|
608
605
|
)
|
|
609
606
|
|
netbox_dns/navigation.py
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
from
|
|
2
|
-
from extras.plugins import PluginMenu
|
|
3
|
-
from utilities.choices import ButtonColorChoices
|
|
1
|
+
from netbox.plugins import PluginMenuButton, PluginMenuItem, PluginMenu
|
|
4
2
|
|
|
5
3
|
view_menu_item = PluginMenuItem(
|
|
6
4
|
link="plugins:netbox_dns:view_list",
|
|
@@ -11,14 +9,12 @@ view_menu_item = PluginMenuItem(
|
|
|
11
9
|
"plugins:netbox_dns:view_add",
|
|
12
10
|
"Add",
|
|
13
11
|
"mdi mdi-plus-thick",
|
|
14
|
-
ButtonColorChoices.GREEN,
|
|
15
12
|
permissions=["netbox_dns.add_view"],
|
|
16
13
|
),
|
|
17
14
|
PluginMenuButton(
|
|
18
15
|
"plugins:netbox_dns:view_import",
|
|
19
16
|
"Import",
|
|
20
17
|
"mdi mdi-upload",
|
|
21
|
-
ButtonColorChoices.CYAN,
|
|
22
18
|
permissions=["netbox_dns.add_view"],
|
|
23
19
|
),
|
|
24
20
|
),
|
|
@@ -33,14 +29,12 @@ zone_menu_item = PluginMenuItem(
|
|
|
33
29
|
"plugins:netbox_dns:zone_add",
|
|
34
30
|
"Add",
|
|
35
31
|
"mdi mdi-plus-thick",
|
|
36
|
-
ButtonColorChoices.GREEN,
|
|
37
32
|
permissions=["netbox_dns.add_zone"],
|
|
38
33
|
),
|
|
39
34
|
PluginMenuButton(
|
|
40
35
|
"plugins:netbox_dns:zone_import",
|
|
41
36
|
"Import",
|
|
42
37
|
"mdi mdi-upload",
|
|
43
|
-
ButtonColorChoices.CYAN,
|
|
44
38
|
permissions=["netbox_dns.add_zone"],
|
|
45
39
|
),
|
|
46
40
|
),
|
|
@@ -55,14 +49,12 @@ nameserver_menu_item = PluginMenuItem(
|
|
|
55
49
|
"plugins:netbox_dns:nameserver_add",
|
|
56
50
|
"Add",
|
|
57
51
|
"mdi mdi-plus-thick",
|
|
58
|
-
ButtonColorChoices.GREEN,
|
|
59
52
|
permissions=["netbox_dns.add_nameserver"],
|
|
60
53
|
),
|
|
61
54
|
PluginMenuButton(
|
|
62
55
|
"plugins:netbox_dns:nameserver_import",
|
|
63
56
|
"Import",
|
|
64
57
|
"mdi mdi-upload",
|
|
65
|
-
ButtonColorChoices.CYAN,
|
|
66
58
|
permissions=["netbox_dns.add_nameserver"],
|
|
67
59
|
),
|
|
68
60
|
),
|
|
@@ -77,14 +69,12 @@ record_menu_item = PluginMenuItem(
|
|
|
77
69
|
"plugins:netbox_dns:record_add",
|
|
78
70
|
"Add",
|
|
79
71
|
"mdi mdi-plus-thick",
|
|
80
|
-
ButtonColorChoices.GREEN,
|
|
81
72
|
permissions=["netbox_dns.add_record"],
|
|
82
73
|
),
|
|
83
74
|
PluginMenuButton(
|
|
84
75
|
"plugins:netbox_dns:record_import",
|
|
85
76
|
"Import",
|
|
86
77
|
"mdi mdi-upload",
|
|
87
|
-
ButtonColorChoices.CYAN,
|
|
88
78
|
permissions=["netbox_dns.add_record"],
|
|
89
79
|
),
|
|
90
80
|
),
|
|
@@ -105,14 +95,12 @@ registrar_menu_item = PluginMenuItem(
|
|
|
105
95
|
"plugins:netbox_dns:registrar_add",
|
|
106
96
|
"Add",
|
|
107
97
|
"mdi mdi-plus-thick",
|
|
108
|
-
ButtonColorChoices.GREEN,
|
|
109
98
|
permissions=["netbox_dns.add_registrar"],
|
|
110
99
|
),
|
|
111
100
|
PluginMenuButton(
|
|
112
101
|
"plugins:netbox_dns:registrar_import",
|
|
113
102
|
"Import",
|
|
114
103
|
"mdi mdi-upload",
|
|
115
|
-
ButtonColorChoices.CYAN,
|
|
116
104
|
permissions=["netbox_dns.add_registrar"],
|
|
117
105
|
),
|
|
118
106
|
),
|
|
@@ -127,14 +115,12 @@ contact_menu_item = PluginMenuItem(
|
|
|
127
115
|
"plugins:netbox_dns:contact_add",
|
|
128
116
|
"Add",
|
|
129
117
|
"mdi mdi-plus-thick",
|
|
130
|
-
ButtonColorChoices.GREEN,
|
|
131
118
|
permissions=["netbox_dns.add_contact"],
|
|
132
119
|
),
|
|
133
120
|
PluginMenuButton(
|
|
134
121
|
"plugins:netbox_dns:contact_import",
|
|
135
122
|
"Import",
|
|
136
123
|
"mdi mdi-upload",
|
|
137
|
-
ButtonColorChoices.CYAN,
|
|
138
124
|
permissions=["netbox_dns.add_contact"],
|
|
139
125
|
),
|
|
140
126
|
),
|
|
@@ -18,12 +18,7 @@ from netbox_dns.utilities.ipam_coupling import (
|
|
|
18
18
|
DNSPermissionDenied,
|
|
19
19
|
)
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
# NetBox 3.5.0 - 3.5.7, 3.5.9+
|
|
23
|
-
from extras.plugins import get_plugin_config
|
|
24
|
-
except ImportError:
|
|
25
|
-
# NetBox 3.5.8
|
|
26
|
-
from extras.plugins.utils import get_plugin_config
|
|
21
|
+
from netbox.plugins.utils import get_plugin_config
|
|
27
22
|
|
|
28
23
|
|
|
29
24
|
@receiver(post_clean, sender=IPAddress)
|
|
@@ -39,14 +34,14 @@ def ip_address_check_permissions_save(instance, **kwargs):
|
|
|
39
34
|
return
|
|
40
35
|
|
|
41
36
|
try:
|
|
42
|
-
if instance.
|
|
37
|
+
if instance.pk is None:
|
|
43
38
|
record = new_address_record(instance)
|
|
44
39
|
if record is not None:
|
|
45
40
|
record.full_clean()
|
|
46
41
|
check_permission(request, "netbox_dns.add_record", record)
|
|
47
42
|
|
|
48
43
|
else:
|
|
49
|
-
if not dns_changed(IPAddress.objects.get(pk=instance.
|
|
44
|
+
if not dns_changed(IPAddress.objects.get(pk=instance.pk), instance):
|
|
50
45
|
return
|
|
51
46
|
|
|
52
47
|
record = get_address_record(instance)
|
netbox_dns/tables/contact.py
CHANGED
netbox_dns/tables/nameserver.py
CHANGED
netbox_dns/tables/registrar.py
CHANGED
netbox_dns/template_content.py
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
from packaging import version
|
|
2
|
+
|
|
2
3
|
from django.conf import settings
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
from extras.plugins import get_plugin_config
|
|
7
|
-
except ImportError:
|
|
8
|
-
# NetBox 3.5.8
|
|
9
|
-
from extras.plugins.utils import get_plugin_config
|
|
10
|
-
from extras.plugins import PluginTemplateExtension
|
|
5
|
+
from netbox.plugins.utils import get_plugin_config
|
|
6
|
+
from netbox.plugins import PluginTemplateExtension
|
|
11
7
|
|
|
12
8
|
from netbox_dns.models import Record, RecordTypeChoices, Zone, View, NameServer
|
|
13
9
|
from netbox_dns.tables import RelatedRecordTable
|
|
@@ -5,62 +5,66 @@
|
|
|
5
5
|
<div class="col col-md-6">
|
|
6
6
|
<div class="card">
|
|
7
7
|
<h5 class="card-header">Contact</h5>
|
|
8
|
-
<
|
|
9
|
-
<
|
|
10
|
-
<
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
</
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
</
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
</
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
</
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
</
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
</
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
</
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
</
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
</
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
</
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
</
|
|
62
|
-
</
|
|
63
|
-
|
|
8
|
+
<table class="table table-hover attr-table">
|
|
9
|
+
<tr>
|
|
10
|
+
<th scope="row">Name</th>
|
|
11
|
+
<td>{{ object.name }}</td>
|
|
12
|
+
</tr>
|
|
13
|
+
{% if object.description %}
|
|
14
|
+
<tr>
|
|
15
|
+
<th scope="row">Description</th>
|
|
16
|
+
<td style="word-break:break-all;">{{ object.description }}</td>
|
|
17
|
+
</tr>
|
|
18
|
+
{% endif %}
|
|
19
|
+
<tr>
|
|
20
|
+
<th scope="row">Contact ID</th>
|
|
21
|
+
<td>{{ object.contact_id }}</td>
|
|
22
|
+
</tr>
|
|
23
|
+
<tr>
|
|
24
|
+
<th scope="row">Organization</th>
|
|
25
|
+
<td>{{ object.organization }}</td>
|
|
26
|
+
</tr>
|
|
27
|
+
<tr>
|
|
28
|
+
<th scope="row">Street</th>
|
|
29
|
+
<td>{{ object.street }}</td>
|
|
30
|
+
</tr>
|
|
31
|
+
<tr>
|
|
32
|
+
<th scope="row">City</th>
|
|
33
|
+
<td>{{ object.city }}</td>
|
|
34
|
+
</tr>
|
|
35
|
+
<tr>
|
|
36
|
+
<th scope="row">State/Province</th>
|
|
37
|
+
<td>{{ object.state_province }}</td>
|
|
38
|
+
</tr>
|
|
39
|
+
<tr>
|
|
40
|
+
<th scope="row">Postal Code</th>
|
|
41
|
+
<td>{{ object.postal_code }}</td>
|
|
42
|
+
</tr>
|
|
43
|
+
<tr>
|
|
44
|
+
<th scope="row">Country</th>
|
|
45
|
+
<td>{{ object.country }}</td>
|
|
46
|
+
</tr>
|
|
47
|
+
<tr>
|
|
48
|
+
<th scope="row">Phone</th>
|
|
49
|
+
<td>{{ object.phone }}</td>
|
|
50
|
+
</tr>
|
|
51
|
+
<tr>
|
|
52
|
+
<th scope="row">Phone Extension</th>
|
|
53
|
+
<td>{{ object.phone_ext }}</td>
|
|
54
|
+
</tr>
|
|
55
|
+
<tr>
|
|
56
|
+
<th scope="row">Fax</th>
|
|
57
|
+
<td>{{ object.fax }}</td>
|
|
58
|
+
</tr>
|
|
59
|
+
<tr>
|
|
60
|
+
<th scope="row">Fax Extension</th>
|
|
61
|
+
<td>{{ object.fax_ext }}</td>
|
|
62
|
+
</tr>
|
|
63
|
+
<tr>
|
|
64
|
+
<th scope="row">Email</th>
|
|
65
|
+
<td>{{ object.email }}</td>
|
|
66
|
+
</tr>
|
|
67
|
+
</table>
|
|
64
68
|
</div>
|
|
65
69
|
{% include 'inc/panels/custom_fields.html' %}
|
|
66
70
|
</div>
|
|
@@ -5,33 +5,33 @@
|
|
|
5
5
|
<div class="col col-md-6">
|
|
6
6
|
<div class="card">
|
|
7
7
|
<h5 class="card-header">Name Server</h5>
|
|
8
|
-
<
|
|
9
|
-
<
|
|
10
|
-
<
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
</
|
|
33
|
-
</
|
|
34
|
-
</
|
|
8
|
+
<table class="table table-hover attr-table">
|
|
9
|
+
<tr>
|
|
10
|
+
<th scope="row">Name</th>
|
|
11
|
+
<td>{{ object.name }}</td>
|
|
12
|
+
</tr>
|
|
13
|
+
{% if unicode_name %}
|
|
14
|
+
<tr>
|
|
15
|
+
<th scope="row">IDN</th>
|
|
16
|
+
<td>{{ unicode_name }}</td>
|
|
17
|
+
</tr>
|
|
18
|
+
{% endif %}
|
|
19
|
+
{% if object.description %}
|
|
20
|
+
<tr>
|
|
21
|
+
<th scope="row">Description</th>
|
|
22
|
+
<td style="word-break:break-all;">{{ object.description }}</td>
|
|
23
|
+
</tr>
|
|
24
|
+
{% endif %}
|
|
25
|
+
<tr>
|
|
26
|
+
<th scope="row">Tenant</th>
|
|
27
|
+
<td>
|
|
28
|
+
{% if object.tenant.group %}
|
|
29
|
+
{{ object.tenant.group|linkify }} /
|
|
30
|
+
{% endif %}
|
|
31
|
+
{{ object.tenant|linkify|placeholder }}
|
|
32
|
+
</td>
|
|
33
|
+
</tr>
|
|
34
|
+
</table>
|
|
35
35
|
</div>
|
|
36
36
|
{% include 'inc/panels/custom_fields.html' %}
|
|
37
37
|
</div>
|