Merge ~r00ta/maas:lp-2045020-preseed-ipv6 into maas:master

Proposed by Jacopo Rota
Status: Merged
Approved by: Jacopo Rota
Approved revision: 294ca29cbee701d4a6d8a674d5cdfb72e8e65878
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~r00ta/maas:lp-2045020-preseed-ipv6
Merge into: maas:master
Diff against target: 127 lines (+44/-16)
2 files modified
src/maasserver/rpc/boot.py (+6/-1)
src/maasserver/rpc/tests/test_boot.py (+38/-15)
Reviewer Review Type Date Requested Status
MAAS Lander Approve
Anton Troyanov Approve
Review via email: mp+456763@code.launchpad.net

Commit message

fix: format ipv6 address in cloud init preseed_url

Description of the change

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

UNIT TESTS
-b lp-2045020-preseed-ipv6 lp:~r00ta/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas-tester/4168/console
COMMIT: 3337672525e906378c67178dcbc7401a4ba7f0d1

review: Needs Fixing
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b lp-2045020-preseed-ipv6 lp:~r00ta/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: accfb7de33173179cc0ffe07a1803dd30948139f

review: Approve
Revision history for this message
Anton Troyanov (troyanov) :
review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b lp-2045020-preseed-ipv6 lp:~r00ta/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: 294ca29cbee701d4a6d8a674d5cdfb72e8e65878

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/rpc/boot.py b/src/maasserver/rpc/boot.py
2index 5b0a4d7..4ec6512 100644
3--- a/src/maasserver/rpc/boot.py
4+++ b/src/maasserver/rpc/boot.py
5@@ -9,6 +9,7 @@ import shlex
6
7 from django.core.exceptions import ObjectDoesNotExist, ValidationError
8 from django.db.models import Q
9+from netaddr import IPAddress
10
11 from maasserver.compose_preseed import RSYSLOG_PORT
12 from maasserver.dns.config import get_resource_name_for_subnet
13@@ -346,7 +347,11 @@ def get_base_url_for_local_ip(
14 # Either no subnet, the subnet has DNS servers defined, or the VLAN
15 # that the subnet belongs to doesn't have DHCP enabled. In
16 # that case fallback to using IP address only.
17- return "http://%s:5248/" % local_ip
18+ return (
19+ "http://[%s]:5248/" % local_ip
20+ if IPAddress(local_ip).version == 6
21+ else "http://%s:5248/" % local_ip
22+ )
23
24
25 def get_final_boot_purpose(machine, arch, purpose):
26diff --git a/src/maasserver/rpc/tests/test_boot.py b/src/maasserver/rpc/tests/test_boot.py
27index 6f6caa0..9d3ee54 100644
28--- a/src/maasserver/rpc/tests/test_boot.py
29+++ b/src/maasserver/rpc/tests/test_boot.py
30@@ -5,7 +5,7 @@ from datetime import timedelta
31 import random
32 from unittest.mock import ANY, DEFAULT
33
34-from netaddr import IPNetwork
35+from netaddr import IPAddress, IPNetwork
36 from testtools.matchers import ContainsAll, StartsWith
37
38 from maasserver import server_address
39@@ -607,10 +607,10 @@ class TestGetConfig(MAASServerTestCase):
40 self.assertEqual(host, observed_config.get("hostname"))
41 self.assertEqual(domainname, observed_config.get("domain"))
42
43- def test_has_enlistment_preseed_url_with_local_ip_no_subnet(self):
44+ def test_has_enlistment_preseed_url_with_local_ip_no_subnet_ipv4(self):
45 rack_controller = factory.make_RackController()
46- local_ip = factory.make_ip_address()
47- remote_ip = factory.make_ip_address()
48+ local_ip = factory.make_ip_address(ipv6=False)
49+ remote_ip = factory.make_ip_address(ipv6=False)
50 factory.make_default_ubuntu_release_bootable()
51 self.patch_autospec(boot_module, "event_log_pxe_request")
52 observed_config = get_config(
53@@ -623,6 +623,22 @@ class TestGetConfig(MAASServerTestCase):
54 observed_config["preseed_url"],
55 )
56
57+ def test_has_enlistment_preseed_url_with_local_ip_no_subnet_ipv6(self):
58+ rack_controller = factory.make_RackController()
59+ local_ip = factory.make_ip_address(ipv6=True)
60+ remote_ip = factory.make_ip_address(ipv6=True)
61+ factory.make_default_ubuntu_release_bootable()
62+ self.patch_autospec(boot_module, "event_log_pxe_request")
63+ observed_config = get_config(
64+ rack_controller.system_id, local_ip, remote_ip
65+ )
66+ assert (
67+ compose_enlistment_preseed_url(
68+ base_url="http://[%s]:5248/" % local_ip
69+ )
70+ == observed_config["preseed_url"]
71+ )
72+
73 def test_has_enlistment_preseed_url_with_local_ip_subnet_with_dns(self):
74 rack_controller = factory.make_RackController()
75 subnet = factory.make_Subnet()
76@@ -633,11 +649,14 @@ class TestGetConfig(MAASServerTestCase):
77 observed_config = get_config(
78 rack_controller.system_id, local_ip, remote_ip
79 )
80- self.assertEqual(
81- compose_enlistment_preseed_url(
82- base_url="http://%s:5248/" % local_ip
83- ),
84- observed_config["preseed_url"],
85+ base_url = (
86+ "http://[%s]:5248/" % local_ip
87+ if IPAddress(local_ip).version == 6
88+ else "http://%s:5248/" % local_ip
89+ )
90+ assert (
91+ compose_enlistment_preseed_url(base_url=base_url)
92+ == observed_config["preseed_url"]
93 )
94
95 def test_has_enlistment_preseed_url_internal_domain(self):
96@@ -732,10 +751,12 @@ class TestGetConfig(MAASServerTestCase):
97 observed_config = get_config(
98 rack_controller.system_id, local_ip, remote_ip, mac=mac
99 )
100- self.assertThat(
101- observed_config["preseed_url"],
102- StartsWith("http://%s:5248" % local_ip),
103+ base_url = (
104+ "http://[%s]:5248/" % local_ip
105+ if IPAddress(local_ip).version == 6
106+ else "http://%s:5248/" % local_ip
107 )
108+ assert observed_config["preseed_url"].startswith(base_url)
109
110 def test_preseed_url_for_known_node_local_ip_subnet_with_dns(self):
111 rack_url = "http://%s" % factory.make_name("host")
112@@ -752,10 +773,12 @@ class TestGetConfig(MAASServerTestCase):
113 observed_config = get_config(
114 rack_controller.system_id, local_ip, remote_ip, mac=mac
115 )
116- self.assertThat(
117- observed_config["preseed_url"],
118- StartsWith("http://%s:5248" % local_ip),
119+ base_url = (
120+ "http://[%s]:5248/" % local_ip
121+ if IPAddress(local_ip).version == 6
122+ else "http://%s:5248/" % local_ip
123 )
124+ assert observed_config["preseed_url"].startswith(base_url)
125
126 def test_preseed_url_for_known_node_internal_domain(self):
127 rack_url = "http://%s" % factory.make_name("host")

Subscribers

People subscribed via source and target branches