Merge lp:~rvb/maas/1081701-c-bis into lp:~maas-committers/maas/trunk
- 1081701-c-bis
- Merge into trunk
Status: | Merged | ||||
---|---|---|---|---|---|
Approved by: | Raphaël Badin | ||||
Approved revision: | no longer in the source branch. | ||||
Merged at revision: | 1381 | ||||
Proposed branch: | lp:~rvb/maas/1081701-c-bis | ||||
Merge into: | lp:~maas-committers/maas/trunk | ||||
Diff against target: |
357 lines (+77/-39) 8 files modified
src/maasserver/api.py (+4/-4) src/maasserver/preseed.py (+23/-17) src/maasserver/tests/test_api.py (+26/-2) src/maasserver/tests/test_dns.py (+2/-2) src/maasserver/tests/test_preseed.py (+11/-9) src/maasserver/tests/test_server_address.py (+3/-3) src/maastesting/factory.py (+7/-0) src/metadataserver/api.py (+1/-2) |
||||
To merge this branch: | bzr merge lp:~rvb/maas/1081701-c-bis | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Gavin Panella (community) | Approve | ||
Review via email: mp+136357@code.launchpad.net |
Commit message
Fix the value of 'server_host' in the preseed.
Description of the change
This fixes a bug in the preseed generation. I just spotted that the preseed was still using "server_host = get_maas_
This was not caught by the tests in place for a stupid reason: "self.assertTha
To fix that I had to refactor the preseed code a bit: instead of passing the url around, we pass the nodegroup. I think it's all for the best: extracting maas_url from nodegroup is done only in the preseed code.
Gavin Panella (allenap) : | # |
Preview Diff
1 | === modified file 'src/maasserver/api.py' | |||
2 | --- src/maasserver/api.py 2012-11-26 16:50:14 +0000 | |||
3 | +++ src/maasserver/api.py 2012-11-27 16:03:23 +0000 | |||
4 | @@ -1630,7 +1630,8 @@ | |||
5 | 1630 | # The node's hostname may include a domain, but we ignore that | 1630 | # The node's hostname may include a domain, but we ignore that |
6 | 1631 | # and use the one from the nodegroup instead. | 1631 | # and use the one from the nodegroup instead. |
7 | 1632 | hostname = strip_domain(node.hostname) | 1632 | hostname = strip_domain(node.hostname) |
9 | 1633 | domain = node.nodegroup.name | 1633 | nodegroup = node.nodegroup |
10 | 1634 | domain = nodegroup.name | ||
11 | 1634 | else: | 1635 | else: |
12 | 1635 | try: | 1636 | try: |
13 | 1636 | pxelinux_arch = request.GET['arch'] | 1637 | pxelinux_arch = request.GET['arch'] |
14 | @@ -1665,8 +1666,7 @@ | |||
15 | 1665 | subarch = pxelinux_subarch | 1666 | subarch = pxelinux_subarch |
16 | 1666 | 1667 | ||
17 | 1667 | nodegroup = find_nodegroup(request) | 1668 | nodegroup = find_nodegroup(request) |
20 | 1668 | base_url = nodegroup.maas_url if nodegroup is not None else None | 1669 | preseed_url = compose_enlistment_preseed_url(nodegroup=nodegroup) |
19 | 1669 | preseed_url = compose_enlistment_preseed_url(base_url=base_url) | ||
21 | 1670 | hostname = 'maas-enlist' | 1670 | hostname = 'maas-enlist' |
22 | 1671 | domain = Config.objects.get_config('enlistment_domain') | 1671 | domain = Config.objects.get_config('enlistment_domain') |
23 | 1672 | 1672 | ||
24 | @@ -1683,7 +1683,7 @@ | |||
25 | 1683 | extra_kernel_opts = None | 1683 | extra_kernel_opts = None |
26 | 1684 | 1684 | ||
27 | 1685 | purpose = get_boot_purpose(node) | 1685 | purpose = get_boot_purpose(node) |
29 | 1686 | server_address = get_maas_facing_server_address() | 1686 | server_address = get_maas_facing_server_address(nodegroup=nodegroup) |
30 | 1687 | cluster_address = get_mandatory_param(request.GET, "local") | 1687 | cluster_address = get_mandatory_param(request.GET, "local") |
31 | 1688 | 1688 | ||
32 | 1689 | params = KernelParameters( | 1689 | params = KernelParameters( |
33 | 1690 | 1690 | ||
34 | === modified file 'src/maasserver/preseed.py' | |||
35 | --- src/maasserver/preseed.py 2012-11-23 14:35:53 +0000 | |||
36 | +++ src/maasserver/preseed.py 2012-11-27 16:03:23 +0000 | |||
37 | @@ -38,24 +38,26 @@ | |||
38 | 38 | GENERIC_FILENAME = 'generic' | 38 | GENERIC_FILENAME = 'generic' |
39 | 39 | 39 | ||
40 | 40 | 40 | ||
42 | 41 | def get_enlist_preseed(base_url=''): | 41 | def get_enlist_preseed(nodegroup=None): |
43 | 42 | """Return the enlistment preseed. | 42 | """Return the enlistment preseed. |
44 | 43 | 43 | ||
45 | 44 | :param nodegroup: The nodegroup used to generate the preseed. | ||
46 | 44 | :return: The rendered preseed string. | 45 | :return: The rendered preseed string. |
47 | 45 | :rtype: basestring. | 46 | :rtype: basestring. |
48 | 46 | """ | 47 | """ |
49 | 47 | return render_enlistment_preseed( | 48 | return render_enlistment_preseed( |
54 | 48 | PRESEED_TYPE.ENLIST, base_url=base_url) | 49 | PRESEED_TYPE.ENLIST, nodegroup=nodegroup) |
55 | 49 | 50 | ||
56 | 50 | 51 | ||
57 | 51 | def get_enlist_userdata(base_url=''): | 52 | def get_enlist_userdata(nodegroup=None): |
58 | 52 | """Return the enlistment preseed. | 53 | """Return the enlistment preseed. |
59 | 53 | 54 | ||
60 | 55 | :param nodegroup: The nodegroup used to generate the preseed. | ||
61 | 54 | :return: The rendered enlistment user-data string. | 56 | :return: The rendered enlistment user-data string. |
62 | 55 | :rtype: basestring. | 57 | :rtype: basestring. |
63 | 56 | """ | 58 | """ |
64 | 57 | return render_enlistment_preseed( | 59 | return render_enlistment_preseed( |
66 | 58 | PRESEED_TYPE.ENLIST_USERDATA, base_url=base_url) | 60 | PRESEED_TYPE.ENLIST_USERDATA, nodegroup=nodegroup) |
67 | 59 | 61 | ||
68 | 60 | 62 | ||
69 | 61 | def get_preseed(node): | 63 | def get_preseed(node): |
70 | @@ -209,21 +211,21 @@ | |||
71 | 209 | return parsed_url.hostname, parsed_url.path | 211 | return parsed_url.hostname, parsed_url.path |
72 | 210 | 212 | ||
73 | 211 | 213 | ||
75 | 212 | def get_preseed_context(release='', base_url=''): | 214 | def get_preseed_context(release='', nodegroup=None): |
76 | 213 | """Return the node-independent context dictionary to be used to render | 215 | """Return the node-independent context dictionary to be used to render |
77 | 214 | preseed templates. | 216 | preseed templates. |
78 | 215 | 217 | ||
79 | 216 | :param node: See `get_preseed_filenames`. | ||
80 | 217 | :param prefix: See `get_preseed_filenames`. | ||
81 | 218 | :param release: See `get_preseed_filenames`. | 218 | :param release: See `get_preseed_filenames`. |
82 | 219 | :param nodegroup: The nodegroup used to generate the preseed. | ||
83 | 219 | :return: The context dictionary. | 220 | :return: The context dictionary. |
84 | 220 | :rtype: dict. | 221 | :rtype: dict. |
85 | 221 | """ | 222 | """ |
87 | 222 | server_host = get_maas_facing_server_host() | 223 | server_host = get_maas_facing_server_host(nodegroup=nodegroup) |
88 | 223 | main_archive_hostname, main_archive_directory = get_hostname_and_path( | 224 | main_archive_hostname, main_archive_directory = get_hostname_and_path( |
89 | 224 | Config.objects.get_config('main_archive')) | 225 | Config.objects.get_config('main_archive')) |
90 | 225 | ports_archive_hostname, ports_archive_directory = get_hostname_and_path( | 226 | ports_archive_hostname, ports_archive_directory = get_hostname_and_path( |
91 | 226 | Config.objects.get_config('ports_archive')) | 227 | Config.objects.get_config('ports_archive')) |
92 | 228 | base_url = nodegroup.maas_url if nodegroup is not None else None | ||
93 | 227 | return { | 229 | return { |
94 | 228 | 'main_archive_hostname': main_archive_hostname, | 230 | 'main_archive_hostname': main_archive_hostname, |
95 | 229 | 'main_archive_directory': main_archive_directory, | 231 | 'main_archive_directory': main_archive_directory, |
96 | @@ -242,7 +244,6 @@ | |||
97 | 242 | preseed templates. | 244 | preseed templates. |
98 | 243 | 245 | ||
99 | 244 | :param node: See `get_preseed_filenames`. | 246 | :param node: See `get_preseed_filenames`. |
100 | 245 | :param prefix: See `get_preseed_filenames`. | ||
101 | 246 | :param release: See `get_preseed_filenames`. | 247 | :param release: See `get_preseed_filenames`. |
102 | 247 | :return: The context dictionary. | 248 | :return: The context dictionary. |
103 | 248 | :rtype: dict. | 249 | :rtype: dict. |
104 | @@ -261,16 +262,17 @@ | |||
105 | 261 | } | 262 | } |
106 | 262 | 263 | ||
107 | 263 | 264 | ||
109 | 264 | def render_enlistment_preseed(prefix, release='', base_url=''): | 265 | def render_enlistment_preseed(prefix, release='', nodegroup=None): |
110 | 265 | """Return the enlistment preseed. | 266 | """Return the enlistment preseed. |
111 | 266 | 267 | ||
112 | 267 | :param prefix: See `get_preseed_filenames`. | 268 | :param prefix: See `get_preseed_filenames`. |
113 | 268 | :param release: See `get_preseed_filenames`. | 269 | :param release: See `get_preseed_filenames`. |
114 | 270 | :param nodegroup: The nodegroup used to generate the preseed. | ||
115 | 269 | :return: The rendered preseed string. | 271 | :return: The rendered preseed string. |
116 | 270 | :rtype: basestring. | 272 | :rtype: basestring. |
117 | 271 | """ | 273 | """ |
118 | 272 | template = load_preseed_template(None, prefix, release) | 274 | template = load_preseed_template(None, prefix, release) |
120 | 273 | context = get_preseed_context(release, base_url=base_url) | 275 | context = get_preseed_context(release, nodegroup=nodegroup) |
121 | 274 | return template.substitute(**context) | 276 | return template.substitute(**context) |
122 | 275 | 277 | ||
123 | 276 | 278 | ||
124 | @@ -284,15 +286,19 @@ | |||
125 | 284 | :rtype: basestring. | 286 | :rtype: basestring. |
126 | 285 | """ | 287 | """ |
127 | 286 | template = load_preseed_template(node, prefix, release) | 288 | template = load_preseed_template(node, prefix, release) |
130 | 287 | base_url = node.nodegroup.maas_url | 289 | nodegroup = node.nodegroup |
131 | 288 | context = get_preseed_context(release, base_url=base_url) | 290 | context = get_preseed_context(release, nodegroup=nodegroup) |
132 | 289 | context.update(get_node_preseed_context(node, release)) | 291 | context.update(get_node_preseed_context(node, release)) |
133 | 290 | return template.substitute(**context) | 292 | return template.substitute(**context) |
134 | 291 | 293 | ||
135 | 292 | 294 | ||
138 | 293 | def compose_enlistment_preseed_url(base_url=''): | 295 | def compose_enlistment_preseed_url(nodegroup=None): |
139 | 294 | """Compose enlistment preseed URL.""" | 296 | """Compose enlistment preseed URL. |
140 | 297 | |||
141 | 298 | :param nodegroup: The nodegroup used to generate the preseed. | ||
142 | 299 | """ | ||
143 | 295 | # Always uses the latest version of the metadata API. | 300 | # Always uses the latest version of the metadata API. |
144 | 301 | base_url = nodegroup.maas_url if nodegroup is not None else None | ||
145 | 296 | version = 'latest' | 302 | version = 'latest' |
146 | 297 | return absolute_reverse( | 303 | return absolute_reverse( |
147 | 298 | 'metadata-enlist-preseed', args=[version], | 304 | 'metadata-enlist-preseed', args=[version], |
148 | 299 | 305 | ||
149 | === modified file 'src/maasserver/tests/test_api.py' | |||
150 | --- src/maasserver/tests/test_api.py 2012-11-27 09:51:35 +0000 | |||
151 | +++ src/maasserver/tests/test_api.py 2012-11-27 16:03:23 +0000 | |||
152 | @@ -48,7 +48,10 @@ | |||
153 | 48 | EnvironmentVariableFixture, | 48 | EnvironmentVariableFixture, |
154 | 49 | Fixture, | 49 | Fixture, |
155 | 50 | ) | 50 | ) |
157 | 51 | from maasserver import api | 51 | from maasserver import ( |
158 | 52 | api, | ||
159 | 53 | server_address, | ||
160 | 54 | ) | ||
161 | 52 | from maasserver.api import ( | 55 | from maasserver.api import ( |
162 | 53 | describe, | 56 | describe, |
163 | 54 | DISPLAYED_NODEGROUP_FIELDS, | 57 | DISPLAYED_NODEGROUP_FIELDS, |
164 | @@ -3438,9 +3441,11 @@ | |||
165 | 3438 | 3441 | ||
166 | 3439 | def test_pxeconfig_enlistment_preseed_url_detects_request_origin(self): | 3442 | def test_pxeconfig_enlistment_preseed_url_detects_request_origin(self): |
167 | 3440 | self.silence_get_ephemeral_name() | 3443 | self.silence_get_ephemeral_name() |
169 | 3441 | ng_url = 'http://%s' % factory.make_name('host') | 3444 | hostname = factory.make_hostname() |
170 | 3445 | ng_url = 'http://%s' % hostname | ||
171 | 3442 | network = IPNetwork("10.1.1/24") | 3446 | network = IPNetwork("10.1.1/24") |
172 | 3443 | ip = factory.getRandomIPInNetwork(network) | 3447 | ip = factory.getRandomIPInNetwork(network) |
173 | 3448 | self.patch(server_address, 'gethostbyname', Mock(return_value=ip)) | ||
174 | 3444 | factory.make_node_group(maas_url=ng_url, network=network) | 3449 | factory.make_node_group(maas_url=ng_url, network=network) |
175 | 3445 | params = self.get_default_params() | 3450 | params = self.get_default_params() |
176 | 3446 | 3451 | ||
177 | @@ -3451,6 +3456,24 @@ | |||
178 | 3451 | json.loads(response.content)["preseed_url"], | 3456 | json.loads(response.content)["preseed_url"], |
179 | 3452 | StartsWith(ng_url)) | 3457 | StartsWith(ng_url)) |
180 | 3453 | 3458 | ||
181 | 3459 | def test_pxeconfig_enlistment_log_host_url_detects_request_origin(self): | ||
182 | 3460 | self.silence_get_ephemeral_name() | ||
183 | 3461 | hostname = factory.make_hostname() | ||
184 | 3462 | ng_url = 'http://%s' % hostname | ||
185 | 3463 | network = IPNetwork("10.1.1/24") | ||
186 | 3464 | ip = factory.getRandomIPInNetwork(network) | ||
187 | 3465 | mock = self.patch( | ||
188 | 3466 | server_address, 'gethostbyname', Mock(return_value=ip)) | ||
189 | 3467 | factory.make_node_group(maas_url=ng_url, network=network) | ||
190 | 3468 | params = self.get_default_params() | ||
191 | 3469 | |||
192 | 3470 | # Simulate that the request targets ip by setting 'SERVER_NAME'. | ||
193 | 3471 | response = self.client.get( | ||
194 | 3472 | reverse('pxeconfig'), params, SERVER_NAME=ip) | ||
195 | 3473 | self.assertEqual( | ||
196 | 3474 | (ip, hostname), | ||
197 | 3475 | (json.loads(response.content)["log_host"], mock.call_args[0][0])) | ||
198 | 3476 | |||
199 | 3454 | def test_pxeconfig_has_preseed_url_for_known_node(self): | 3477 | def test_pxeconfig_has_preseed_url_for_known_node(self): |
200 | 3455 | params = self.get_mac_params() | 3478 | params = self.get_mac_params() |
201 | 3456 | node = MACAddress.objects.get(mac_address=params['mac']).node | 3479 | node = MACAddress.objects.get(mac_address=params['mac']).node |
202 | @@ -3463,6 +3486,7 @@ | |||
203 | 3463 | ng_url = 'http://%s' % factory.make_name('host') | 3486 | ng_url = 'http://%s' % factory.make_name('host') |
204 | 3464 | network = IPNetwork("10.1.1/24") | 3487 | network = IPNetwork("10.1.1/24") |
205 | 3465 | ip = factory.getRandomIPInNetwork(network) | 3488 | ip = factory.getRandomIPInNetwork(network) |
206 | 3489 | self.patch(server_address, 'gethostbyname', Mock(return_value=ip)) | ||
207 | 3466 | nodegroup = factory.make_node_group(maas_url=ng_url, network=network) | 3490 | nodegroup = factory.make_node_group(maas_url=ng_url, network=network) |
208 | 3467 | params = self.get_mac_params() | 3491 | params = self.get_mac_params() |
209 | 3468 | node = MACAddress.objects.get(mac_address=params['mac']).node | 3492 | node = MACAddress.objects.get(mac_address=params['mac']).node |
210 | 3469 | 3493 | ||
211 | === modified file 'src/maasserver/tests/test_dns.py' | |||
212 | --- src/maasserver/tests/test_dns.py 2012-11-26 14:41:53 +0000 | |||
213 | +++ src/maasserver/tests/test_dns.py 2012-11-27 16:03:23 +0000 | |||
214 | @@ -91,7 +91,7 @@ | |||
215 | 91 | ip = factory.getRandomIPAddress() | 91 | ip = factory.getRandomIPAddress() |
216 | 92 | resolver = FakeMethod(result=ip) | 92 | resolver = FakeMethod(result=ip) |
217 | 93 | self.patch(server_address, 'gethostbyname', resolver) | 93 | self.patch(server_address, 'gethostbyname', resolver) |
219 | 94 | hostname = factory.getRandomString().lower() | 94 | hostname = factory.make_hostname() |
220 | 95 | self.patch_DEFAULT_MAAS_URL_with_random_values(hostname=hostname) | 95 | self.patch_DEFAULT_MAAS_URL_with_random_values(hostname=hostname) |
221 | 96 | self.assertEqual( | 96 | self.assertEqual( |
222 | 97 | (ip, [(hostname, )]), | 97 | (ip, [(hostname, )]), |
223 | @@ -118,7 +118,7 @@ | |||
224 | 118 | ip = factory.getRandomIPAddress() | 118 | ip = factory.getRandomIPAddress() |
225 | 119 | resolver = FakeMethod(result=ip) | 119 | resolver = FakeMethod(result=ip) |
226 | 120 | self.patch(server_address, 'gethostbyname', resolver) | 120 | self.patch(server_address, 'gethostbyname', resolver) |
228 | 121 | hostname = factory.getRandomString().lower() | 121 | hostname = factory.make_hostname() |
229 | 122 | maas_url = 'http://%s' % hostname | 122 | maas_url = 'http://%s' % hostname |
230 | 123 | nodegroup = factory.make_node_group(maas_url=maas_url) | 123 | nodegroup = factory.make_node_group(maas_url=maas_url) |
231 | 124 | self.assertEqual( | 124 | self.assertEqual( |
232 | 125 | 125 | ||
233 | === modified file 'src/maasserver/tests/test_preseed.py' | |||
234 | --- src/maasserver/tests/test_preseed.py 2012-11-23 14:35:53 +0000 | |||
235 | +++ src/maasserver/tests/test_preseed.py 2012-11-27 16:03:23 +0000 | |||
236 | @@ -323,7 +323,8 @@ | |||
237 | 323 | 323 | ||
238 | 324 | def test_get_preseed_context_contains_keys(self): | 324 | def test_get_preseed_context_contains_keys(self): |
239 | 325 | release = factory.getRandomString() | 325 | release = factory.getRandomString() |
241 | 326 | context = get_preseed_context(None, release) | 326 | nodegroup = factory.make_node_group(maas_url=factory.getRandomString()) |
242 | 327 | context = get_preseed_context(release, nodegroup) | ||
243 | 327 | self.assertItemsEqual( | 328 | self.assertItemsEqual( |
244 | 328 | ['release', 'metadata_enlist_url', 'server_host', 'server_url', | 329 | ['release', 'metadata_enlist_url', 'server_host', 'server_url', |
245 | 329 | 'main_archive_hostname', 'main_archive_directory', | 330 | 'main_archive_hostname', 'main_archive_directory', |
246 | @@ -339,8 +340,8 @@ | |||
247 | 339 | ports_archive = make_url('ports_archive') | 340 | ports_archive = make_url('ports_archive') |
248 | 340 | Config.objects.set_config('main_archive', main_archive) | 341 | Config.objects.set_config('main_archive', main_archive) |
249 | 341 | Config.objects.set_config('ports_archive', ports_archive) | 342 | Config.objects.set_config('ports_archive', ports_archive) |
252 | 342 | context = get_preseed_context( | 343 | nodegroup = factory.make_node_group(maas_url=factory.getRandomString()) |
253 | 343 | factory.make_node(), factory.getRandomString()) | 344 | context = get_preseed_context(factory.make_node(), nodegroup) |
254 | 344 | parsed_main_archive = urlparse(main_archive) | 345 | parsed_main_archive = urlparse(main_archive) |
255 | 345 | parsed_ports_archive = urlparse(ports_archive) | 346 | parsed_ports_archive = urlparse(ports_archive) |
256 | 346 | self.assertEqual( | 347 | self.assertEqual( |
257 | @@ -402,9 +403,9 @@ | |||
258 | 402 | self.assertIsInstance(preseed, str) | 403 | self.assertIsInstance(preseed, str) |
259 | 403 | 404 | ||
260 | 404 | def test_get_preseed_uses_nodegroup_maas_url(self): | 405 | def test_get_preseed_uses_nodegroup_maas_url(self): |
262 | 405 | ng_url = 'http://%s' % factory.make_name('host') | 406 | ng_url = 'http://%s' % factory.make_hostname() |
263 | 406 | ng = factory.make_node_group(maas_url=ng_url) | 407 | ng = factory.make_node_group(maas_url=ng_url) |
265 | 407 | maas_url = 'http://%s' % factory.make_name('host') | 408 | maas_url = 'http://%s' % factory.make_hostname() |
266 | 408 | node = factory.make_node( | 409 | node = factory.make_node( |
267 | 409 | nodegroup=ng, status=NODE_STATUS.COMMISSIONING) | 410 | nodegroup=ng, status=NODE_STATUS.COMMISSIONING) |
268 | 410 | self.patch(settings, 'DEFAULT_MAAS_URL', maas_url) | 411 | self.patch(settings, 'DEFAULT_MAAS_URL', maas_url) |
269 | @@ -423,11 +424,12 @@ | |||
270 | 423 | self.assertIsInstance(preseed, str) | 424 | self.assertIsInstance(preseed, str) |
271 | 424 | 425 | ||
272 | 425 | def test_get_preseed_uses_nodegroup_maas_url(self): | 426 | def test_get_preseed_uses_nodegroup_maas_url(self): |
275 | 426 | ng_url = 'http://%s' % factory.make_name('host') | 427 | ng_url = 'http://%s' % factory.make_hostname() |
276 | 427 | maas_url = 'http://%s' % factory.make_name('host') | 428 | maas_url = 'http://%s' % factory.make_hostname() |
277 | 428 | self.patch(settings, 'DEFAULT_MAAS_URL', maas_url) | 429 | self.patch(settings, 'DEFAULT_MAAS_URL', maas_url) |
278 | 430 | nodegroup = factory.make_node_group(maas_url=ng_url) | ||
279 | 429 | preseed = render_enlistment_preseed( | 431 | preseed = render_enlistment_preseed( |
281 | 430 | PRESEED_TYPE.ENLIST, "precise", base_url=ng_url) | 432 | PRESEED_TYPE.ENLIST, "precise", nodegroup=nodegroup) |
282 | 431 | self.assertThat( | 433 | self.assertThat( |
283 | 432 | preseed, MatchesAll(*[Contains(ng_url), Not(Contains(maas_url))])) | 434 | preseed, MatchesAll(*[Contains(ng_url), Not(Contains(maas_url))])) |
284 | 433 | 435 | ||
285 | @@ -461,7 +463,7 @@ | |||
286 | 461 | class TestPreseedProxy(TestCase): | 463 | class TestPreseedProxy(TestCase): |
287 | 462 | 464 | ||
288 | 463 | def test_preseed_uses_default_proxy(self): | 465 | def test_preseed_uses_default_proxy(self): |
290 | 464 | server_host = factory.getRandomString().lower() | 466 | server_host = factory.make_hostname() |
291 | 465 | url = 'http://%s:%d/%s' % ( | 467 | url = 'http://%s:%d/%s' % ( |
292 | 466 | server_host, factory.getRandomPort(), factory.getRandomString()) | 468 | server_host, factory.getRandomPort(), factory.getRandomString()) |
293 | 467 | self.patch(settings, 'DEFAULT_MAAS_URL', url) | 469 | self.patch(settings, 'DEFAULT_MAAS_URL', url) |
294 | 468 | 470 | ||
295 | === modified file 'src/maasserver/tests/test_server_address.py' | |||
296 | --- src/maasserver/tests/test_server_address.py 2012-11-26 14:41:53 +0000 | |||
297 | +++ src/maasserver/tests/test_server_address.py 2012-11-27 16:03:23 +0000 | |||
298 | @@ -24,7 +24,7 @@ | |||
299 | 24 | class TestServerAddress(TestCase): | 24 | class TestServerAddress(TestCase): |
300 | 25 | 25 | ||
301 | 26 | def make_hostname(self): | 26 | def make_hostname(self): |
303 | 27 | return '%s.example.com' % factory.make_name('host').lower() | 27 | return '%s.example.com' % factory.make_hostname() |
304 | 28 | 28 | ||
305 | 29 | def set_DEFAULT_MAAS_URL(self, hostname=None, with_port=False): | 29 | def set_DEFAULT_MAAS_URL(self, hostname=None, with_port=False): |
306 | 30 | """Patch DEFAULT_MAAS_URL to be a (partly) random URL.""" | 30 | """Patch DEFAULT_MAAS_URL to be a (partly) random URL.""" |
307 | @@ -49,7 +49,7 @@ | |||
308 | 49 | self.assertEqual(ip, server_address.get_maas_facing_server_host()) | 49 | self.assertEqual(ip, server_address.get_maas_facing_server_host()) |
309 | 50 | 50 | ||
310 | 51 | def test_get_maas_facing_server_host_returns_nodegroup_maas_url(self): | 51 | def test_get_maas_facing_server_host_returns_nodegroup_maas_url(self): |
312 | 52 | hostname = factory.make_name('host').lower() | 52 | hostname = factory.make_hostname() |
313 | 53 | maas_url = 'http://%s' % hostname | 53 | maas_url = 'http://%s' % hostname |
314 | 54 | nodegroup = factory.make_node_group(maas_url=maas_url) | 54 | nodegroup = factory.make_node_group(maas_url=maas_url) |
315 | 55 | self.assertEqual( | 55 | self.assertEqual( |
316 | @@ -82,7 +82,7 @@ | |||
317 | 82 | ip = factory.getRandomIPAddress() | 82 | ip = factory.getRandomIPAddress() |
318 | 83 | resolver = FakeMethod(result=ip) | 83 | resolver = FakeMethod(result=ip) |
319 | 84 | self.patch(server_address, 'gethostbyname', resolver) | 84 | self.patch(server_address, 'gethostbyname', resolver) |
321 | 85 | hostname = self.make_hostname().lower() | 85 | hostname = self.make_hostname() |
322 | 86 | self.set_DEFAULT_MAAS_URL(hostname=hostname) | 86 | self.set_DEFAULT_MAAS_URL(hostname=hostname) |
323 | 87 | self.assertEqual( | 87 | self.assertEqual( |
324 | 88 | (ip, [(hostname, )]), | 88 | (ip, [(hostname, )]), |
325 | 89 | 89 | ||
326 | === modified file 'src/maastesting/factory.py' | |||
327 | --- src/maastesting/factory.py 2012-09-10 14:50:56 +0000 | |||
328 | +++ src/maastesting/factory.py 2012-11-27 16:03:23 +0000 | |||
329 | @@ -148,6 +148,13 @@ | |||
330 | 148 | return sep.join( | 148 | return sep.join( |
331 | 149 | filter(None, [prefix, self.getRandomString(size=size)])) | 149 | filter(None, [prefix, self.getRandomString(size=size)])) |
332 | 150 | 150 | ||
333 | 151 | def make_hostname(self, prefix='host', *args, **kwargs): | ||
334 | 152 | """Generate a random hostname. | ||
335 | 153 | |||
336 | 154 | The returned hostname is lowercase because python's urlparse | ||
337 | 155 | implicitely lowercases the hostnames.""" | ||
338 | 156 | return self.make_name(prefix=prefix, *args, **kwargs).lower() | ||
339 | 157 | |||
340 | 151 | def make_names(self, *prefixes): | 158 | def make_names(self, *prefixes): |
341 | 152 | """Generate random names. | 159 | """Generate random names. |
342 | 153 | 160 | ||
343 | 154 | 161 | ||
344 | === modified file 'src/metadataserver/api.py' | |||
345 | --- src/metadataserver/api.py 2012-11-26 08:52:01 +0000 | |||
346 | +++ src/metadataserver/api.py 2012-11-27 16:03:23 +0000 | |||
347 | @@ -395,9 +395,8 @@ | |||
348 | 395 | def get_enlist_preseed(self, request, version=None): | 395 | def get_enlist_preseed(self, request, version=None): |
349 | 396 | """Render and return a preseed script for enlistment.""" | 396 | """Render and return a preseed script for enlistment.""" |
350 | 397 | nodegroup = find_nodegroup(request) | 397 | nodegroup = find_nodegroup(request) |
351 | 398 | base_url = nodegroup.maas_url if nodegroup is not None else None | ||
352 | 399 | return HttpResponse( | 398 | return HttpResponse( |
354 | 400 | get_enlist_preseed(base_url=base_url), mimetype="text/plain") | 399 | get_enlist_preseed(nodegroup=nodegroup), mimetype="text/plain") |
355 | 401 | 400 | ||
356 | 402 | @operation(idempotent=True) | 401 | @operation(idempotent=True) |
357 | 403 | def get_preseed(self, request, version=None, system_id=None): | 402 | def get_preseed(self, request, version=None, system_id=None): |