Merge ~lloydwaltersj/maas:check-duplicating-internal-dns-name into maas:master

Proposed by Jack Lloyd-Walters
Status: Merged
Approved by: Jack Lloyd-Walters
Approved revision: 941e2ef85e09aa9fb69579edfa0b72e7e84d0c75
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~lloydwaltersj/maas:check-duplicating-internal-dns-name
Merge into: maas:master
Diff against target: 70 lines (+28/-2)
3 files modified
src/maasserver/forms/settings.py (+4/-2)
src/maasserver/models/domain.py (+11/-0)
src/maasserver/models/tests/test_domain.py (+13/-0)
Reviewer Review Type Date Requested Status
Anton Troyanov Approve
MAAS Lander Approve
Review via email: mp+426357@code.launchpad.net

Commit message

disallow duplicating maas_internal_domain name when creating a new DNS

To post a comment you must log in.
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b check-duplicating-internal-dns-name lp:~lloydwaltersj/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: 941e2ef85e09aa9fb69579edfa0b72e7e84d0c75

review: Approve
Revision history for this message
Anton Troyanov (troyanov) wrote :

LGTM

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/forms/settings.py b/src/maasserver/forms/settings.py
2index f9887e1..ea3598e 100644
3--- a/src/maasserver/forms/settings.py
4+++ b/src/maasserver/forms/settings.py
5@@ -33,7 +33,7 @@ from maasserver.models.config import (
6 DNSSEC_VALIDATION_CHOICES,
7 NETWORK_DISCOVERY_CHOICES,
8 )
9-from maasserver.models.domain import validate_domain_name
10+from maasserver.models.domain import validate_internal_domain_name
11 from maasserver.storage_layouts import STORAGE_LAYOUT_CHOICES
12 from maasserver.utils.forms import compose_invalid_choice_text
13 from maasserver.utils.osystems import (
14@@ -263,7 +263,9 @@ def make_active_discovery_interval_field(*args, **kwargs):
15
16 def make_maas_internal_domain_field(*args, **kwargs):
17 """Build and return the maas_internal_domain field."""
18- return forms.CharField(validators=[validate_domain_name], **kwargs)
19+ return forms.CharField(
20+ validators=[validate_internal_domain_name], **kwargs
21+ )
22
23
24 class RemoteSyslogField(forms.CharField):
25diff --git a/src/maasserver/models/domain.py b/src/maasserver/models/domain.py
26index 0eb538f..f3c1d71 100644
27--- a/src/maasserver/models/domain.py
28+++ b/src/maasserver/models/domain.py
29@@ -38,6 +38,17 @@ def validate_domain_name(value):
30 namespec = re.compile("^%s$" % NAMESPEC)
31 if not namespec.search(value) or len(value) > 255:
32 raise ValidationError("Invalid domain name: %s." % value)
33+ if value == Config.objects.get_config("maas_internal_domain"):
34+ raise ValidationError(
35+ "Domain name cannot duplicate maas internal domain name"
36+ )
37+
38+
39+def validate_internal_domain_name(value):
40+ """Django validator: `value` must be a valid DNS Zone name."""
41+ namespec = re.compile("^%s$" % NAMESPEC)
42+ if not namespec.search(value) or len(value) > 255:
43+ raise ValidationError("Invalid domain name: %s." % value)
44
45
46 NAME_VALIDATOR = RegexValidator("^%s$" % NAMESPEC)
47diff --git a/src/maasserver/models/tests/test_domain.py b/src/maasserver/models/tests/test_domain.py
48index dd430b0..0fdd131 100644
49--- a/src/maasserver/models/tests/test_domain.py
50+++ b/src/maasserver/models/tests/test_domain.py
51@@ -170,6 +170,19 @@ class TestDomain(MAASServerTestCase):
52 ValidationError, factory.make_Domain, name="invalid*name"
53 )
54
55+ def test_duplicating_internal_name_raises_exception(self):
56+ internal_domain = Config.objects.get_config("maas_internal_domain")
57+ self.assertRaises(
58+ ValidationError, factory.make_Domain, name=internal_domain
59+ )
60+
61+ def test_setting_internal_name_allows_old_internal_domain_name(self):
62+ internal_domain_old = Config.objects.get_config("maas_internal_domain")
63+ internal_domain_new = factory.make_name("internal")
64+ Config.objects.set_config("maas_internal_domain", internal_domain_new)
65+ domain = factory.make_Domain(name=internal_domain_old)
66+ self.assertEqual(internal_domain_old, domain.name)
67+
68 def test_get_default_domain_is_idempotent(self):
69 default_domain = Domain.objects.get_default_domain()
70 default_domain2 = Domain.objects.get_default_domain()

Subscribers

People subscribed via source and target branches