Merge ~mfo/maas:3.1 into maas:3.1
- Git
- lp:~mfo/maas
- 3.1
- Merge into 3.1
Proposed by
Mauricio Faria de Oliveira
Status: | Merged |
---|---|
Merged at revision: | 5ad7060e524668a7eff438fa21fe5bd2199e4ff1 |
Proposed branch: | ~mfo/maas:3.1 |
Merge into: | maas:3.1 |
Diff against target: |
688 lines (+123/-247) 7 files modified
debian/changelog (+6/-0) dev/null (+0/-0) setup.cfg (+1/-1) src/maasserver/dhcp.py (+9/-15) src/maasserver/tests/test_dhcp.py (+12/-108) src/metadataserver/builtin_scripts/commissioning_scripts/bmc_config.py (+41/-56) src/metadataserver/builtin_scripts/commissioning_scripts/tests/test_bmc_config.py (+54/-67) |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
MAAS Lander | Approve | ||
Mauricio Faria de Oliveira | Pending | ||
Review via email: mp+450510@code.launchpad.net |
Commit message
Description of the change
Please ignore and do not merge; only for tests.
To post a comment you must log in.
Revision history for this message
MAAS Lander (maas-lander) wrote : | # |
UNIT TESTS
-b 3.1 lp:~mfo/maas/+git/maas into -b 3.1 lp:~maas-committers/maas
STATUS: SUCCESS
COMMIT: 209cc3eb6038b5e
review:
Approve
Revision history for this message
Mauricio Faria de Oliveira (mfo) wrote : | # |
jenkins: !test
Revision history for this message
MAAS Lander (maas-lander) wrote : | # |
UNIT TESTS
-b 3.1 lp:~mfo/maas/+git/maas into -b 3.1 lp:~maas-committers/maas
STATUS: SUCCESS
COMMIT: 2761b73c5d63e3d
review:
Approve
Revision history for this message
Mauricio Faria de Oliveira (mfo) wrote : | # |
jenkins: !test
Revision history for this message
MAAS Lander (maas-lander) wrote : | # |
UNIT TESTS
-b 3.1 lp:~mfo/maas/+git/maas into -b 3.1 lp:~maas-committers/maas
STATUS: SUCCESS
COMMIT: 5ad7060e524668a
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | diff --git a/creds.yaml b/creds.yaml |
2 | deleted file mode 100644 |
3 | index e69de29..0000000 |
4 | --- a/creds.yaml |
5 | +++ /dev/null |
6 | diff --git a/debian/changelog b/debian/changelog |
7 | index 204172d..39b080c 100644 |
8 | --- a/debian/changelog |
9 | +++ b/debian/changelog |
10 | @@ -1,3 +1,9 @@ |
11 | +maas (1:3.1.2-0ubuntu1) focal; urgency=medium |
12 | + |
13 | + * New upstream release, MAAS 3.1.2. |
14 | + |
15 | + -- Mauricio Faria de Oliveira <mfo@canonical.com> Mon, 04 Sep 2023 14:14:22 -0300 |
16 | + |
17 | maas (1:3.1.2~rc1-0ubuntu1) focal; urgency=medium |
18 | |
19 | * New upstream release, MAAS 3.1.2 RC1. |
20 | diff --git a/setup.cfg b/setup.cfg |
21 | index ca76a6a..4a59a2d 100644 |
22 | --- a/setup.cfg |
23 | +++ b/setup.cfg |
24 | @@ -1,6 +1,6 @@ |
25 | [metadata] |
26 | name = maas |
27 | -version = 3.1.2rc1 |
28 | +version = 3.1.2 |
29 | description = Metal As A Service |
30 | long_description = file: README.rst |
31 | url = https://maas.io/ |
32 | diff --git a/src/maasserver/dhcp.py b/src/maasserver/dhcp.py |
33 | index f1bcd74..ac30d84 100644 |
34 | --- a/src/maasserver/dhcp.py |
35 | +++ b/src/maasserver/dhcp.py |
36 | @@ -224,17 +224,15 @@ def ip_is_on_vlan(ip_address, vlan): |
37 | ) |
38 | |
39 | |
40 | -def get_ip_address_for_interface(interface, vlan, ip_version: int): |
41 | +def get_ip_address_for_interface(interface, vlan): |
42 | """Return the IP address for `interface` on `vlan`.""" |
43 | for ip_address in interface.ip_addresses.all(): |
44 | - if ip_is_version(ip_address, ip_version) and ip_is_on_vlan( |
45 | - ip_address, vlan |
46 | - ): |
47 | + if ip_is_on_vlan(ip_address, vlan): |
48 | return ip_address |
49 | return None |
50 | |
51 | |
52 | -def get_ip_address_for_rack_controller(rack_controller, vlan, ip_version: int): |
53 | +def get_ip_address_for_rack_controller(rack_controller, vlan): |
54 | """Return the IP address for `rack_controller` on `vlan`.""" |
55 | # First we build a list of all interfaces that have an IP address |
56 | # on that vlan. Then we pick the best interface for that vlan |
57 | @@ -245,12 +243,10 @@ def get_ip_address_for_rack_controller(rack_controller, vlan, ip_version: int): |
58 | matching_interfaces = set() |
59 | for interface in interfaces: |
60 | for ip_address in interface.ip_addresses.all(): |
61 | - if ip_is_version(ip_address, ip_version) and ip_is_on_vlan( |
62 | - ip_address, vlan |
63 | - ): |
64 | + if ip_is_on_vlan(ip_address, vlan): |
65 | matching_interfaces.add(interface) |
66 | interface = get_best_interface(matching_interfaces) |
67 | - return get_ip_address_for_interface(interface, vlan, ip_version) |
68 | + return get_ip_address_for_interface(interface, vlan) |
69 | |
70 | |
71 | @typed |
72 | @@ -493,19 +489,17 @@ def make_subnet_config( |
73 | return subnet_config |
74 | |
75 | |
76 | -def make_failover_peer_config(vlan, rack_controller, ip_version: int): |
77 | +def make_failover_peer_config(vlan, rack_controller): |
78 | """Return DHCP failover peer configuration dict for a rack controller.""" |
79 | is_primary = vlan.primary_rack_id == rack_controller.id |
80 | interface_ip_address = get_ip_address_for_rack_controller( |
81 | - rack_controller, vlan, ip_version |
82 | + rack_controller, vlan |
83 | ) |
84 | if is_primary: |
85 | peer_rack = vlan.secondary_rack |
86 | else: |
87 | peer_rack = vlan.primary_rack |
88 | - peer_address = get_ip_address_for_rack_controller( |
89 | - peer_rack, vlan, ip_version |
90 | - ) |
91 | + peer_address = get_ip_address_for_rack_controller(peer_rack, vlan) |
92 | name = "failover-vlan-%d" % vlan.id |
93 | return ( |
94 | name, |
95 | @@ -659,7 +653,7 @@ def get_dhcp_configure_for( |
96 | if has_secondary: |
97 | # Generate the failover peer for this VLAN. |
98 | peer_name, peer_config, peer_rack = make_failover_peer_config( |
99 | - vlan, rack_controller, ip_version |
100 | + vlan, rack_controller |
101 | ) |
102 | else: |
103 | peer_name, peer_config, peer_rack = None, None, None |
104 | diff --git a/src/maasserver/tests/test_dhcp.py b/src/maasserver/tests/test_dhcp.py |
105 | index 6383535..dc2975a 100644 |
106 | --- a/src/maasserver/tests/test_dhcp.py |
107 | +++ b/src/maasserver/tests/test_dhcp.py |
108 | @@ -815,16 +815,10 @@ class TestGetIPAddressForInterface(MAASServerTestCase): |
109 | interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL, vlan=vlan) |
110 | subnet = factory.make_Subnet(vlan=vlan) |
111 | ip_address = factory.make_StaticIPAddress( |
112 | - ip=factory.pick_ip_in_Subnet(subnet), |
113 | - alloc_type=IPADDRESS_TYPE.AUTO, |
114 | - subnet=subnet, |
115 | - interface=interface, |
116 | + alloc_type=IPADDRESS_TYPE.AUTO, subnet=subnet, interface=interface |
117 | ) |
118 | self.assertEqual( |
119 | - ip_address, |
120 | - dhcp.get_ip_address_for_interface( |
121 | - interface, vlan, subnet.get_ip_version() |
122 | - ), |
123 | + ip_address, dhcp.get_ip_address_for_interface(interface, vlan) |
124 | ) |
125 | |
126 | def test_returns_None(self): |
127 | @@ -832,15 +826,10 @@ class TestGetIPAddressForInterface(MAASServerTestCase): |
128 | interface = factory.make_Interface(INTERFACE_TYPE.PHYSICAL, vlan=vlan) |
129 | subnet = factory.make_Subnet(vlan=vlan) |
130 | factory.make_StaticIPAddress( |
131 | - ip=factory.pick_ip_in_Subnet(subnet), |
132 | - alloc_type=IPADDRESS_TYPE.AUTO, |
133 | - subnet=subnet, |
134 | - interface=interface, |
135 | + alloc_type=IPADDRESS_TYPE.AUTO, subnet=subnet, interface=interface |
136 | ) |
137 | self.assertIsNone( |
138 | - dhcp.get_ip_address_for_interface( |
139 | - interface, factory.make_VLAN(), subnet.get_ip_version() |
140 | - ) |
141 | + dhcp.get_ip_address_for_interface(interface, factory.make_VLAN()) |
142 | ) |
143 | |
144 | |
145 | @@ -855,16 +844,11 @@ class TestGetIPAddressForRackController(MAASServerTestCase): |
146 | ) |
147 | subnet = factory.make_Subnet(vlan=vlan) |
148 | ip_address = factory.make_StaticIPAddress( |
149 | - ip=factory.pick_ip_in_Subnet(subnet), |
150 | - alloc_type=IPADDRESS_TYPE.AUTO, |
151 | - subnet=subnet, |
152 | - interface=interface, |
153 | + alloc_type=IPADDRESS_TYPE.AUTO, subnet=subnet, interface=interface |
154 | ) |
155 | self.assertEqual( |
156 | ip_address, |
157 | - dhcp.get_ip_address_for_rack_controller( |
158 | - rack_controller, vlan, subnet.get_ip_version() |
159 | - ), |
160 | + dhcp.get_ip_address_for_rack_controller(rack_controller, vlan), |
161 | ) |
162 | |
163 | def test_returns_ip_address_from_best_interface_on_rack_controller(self): |
164 | @@ -884,10 +868,7 @@ class TestGetIPAddressForRackController(MAASServerTestCase): |
165 | ) |
166 | subnet = factory.make_Subnet(vlan=vlan) |
167 | factory.make_StaticIPAddress( |
168 | - ip=factory.pick_ip_in_Subnet(subnet), |
169 | - alloc_type=IPADDRESS_TYPE.AUTO, |
170 | - subnet=subnet, |
171 | - interface=interface, |
172 | + alloc_type=IPADDRESS_TYPE.AUTO, subnet=subnet, interface=interface |
173 | ) |
174 | bond_ip_address = factory.make_StaticIPAddress( |
175 | alloc_type=IPADDRESS_TYPE.AUTO, |
176 | @@ -896,9 +877,7 @@ class TestGetIPAddressForRackController(MAASServerTestCase): |
177 | ) |
178 | self.assertEqual( |
179 | bond_ip_address, |
180 | - dhcp.get_ip_address_for_rack_controller( |
181 | - rack_controller, vlan, subnet.get_ip_version() |
182 | - ), |
183 | + dhcp.get_ip_address_for_rack_controller(rack_controller, vlan), |
184 | ) |
185 | |
186 | |
187 | @@ -2104,12 +2083,11 @@ class TestMakeFailoverPeerConfig(MAASServerTestCase): |
188 | primary_rack=primary_rack, |
189 | secondary_rack=secondary_rack, |
190 | ) |
191 | - subnet = factory.make_Subnet(vlan=vlan, version=4) |
192 | + subnet = factory.make_Subnet(vlan=vlan) |
193 | primary_interface = factory.make_Interface( |
194 | INTERFACE_TYPE.PHYSICAL, node=primary_rack, vlan=vlan |
195 | ) |
196 | primary_ip = factory.make_StaticIPAddress( |
197 | - ip=factory.pick_ip_in_Subnet(subnet), |
198 | alloc_type=IPADDRESS_TYPE.AUTO, |
199 | subnet=subnet, |
200 | interface=primary_interface, |
201 | @@ -2118,7 +2096,6 @@ class TestMakeFailoverPeerConfig(MAASServerTestCase): |
202 | INTERFACE_TYPE.PHYSICAL, node=secondary_rack, vlan=vlan |
203 | ) |
204 | secondary_ip = factory.make_StaticIPAddress( |
205 | - ip=factory.pick_ip_in_Subnet(subnet), |
206 | alloc_type=IPADDRESS_TYPE.AUTO, |
207 | subnet=subnet, |
208 | interface=secondary_interface, |
209 | @@ -2135,7 +2112,7 @@ class TestMakeFailoverPeerConfig(MAASServerTestCase): |
210 | }, |
211 | secondary_rack, |
212 | ), |
213 | - dhcp.make_failover_peer_config(vlan, primary_rack, 4), |
214 | + dhcp.make_failover_peer_config(vlan, primary_rack), |
215 | ) |
216 | |
217 | def test_renders_config_for_secondary(self): |
218 | @@ -2146,12 +2123,11 @@ class TestMakeFailoverPeerConfig(MAASServerTestCase): |
219 | primary_rack=primary_rack, |
220 | secondary_rack=secondary_rack, |
221 | ) |
222 | - subnet = factory.make_Subnet(vlan=vlan, version=4) |
223 | + subnet = factory.make_Subnet(vlan=vlan) |
224 | primary_interface = factory.make_Interface( |
225 | INTERFACE_TYPE.PHYSICAL, node=primary_rack, vlan=vlan |
226 | ) |
227 | primary_ip = factory.make_StaticIPAddress( |
228 | - ip=factory.pick_ip_in_Subnet(subnet), |
229 | alloc_type=IPADDRESS_TYPE.AUTO, |
230 | subnet=subnet, |
231 | interface=primary_interface, |
232 | @@ -2160,7 +2136,6 @@ class TestMakeFailoverPeerConfig(MAASServerTestCase): |
233 | INTERFACE_TYPE.PHYSICAL, node=secondary_rack, vlan=vlan |
234 | ) |
235 | secondary_ip = factory.make_StaticIPAddress( |
236 | - ip=factory.pick_ip_in_Subnet(subnet), |
237 | alloc_type=IPADDRESS_TYPE.AUTO, |
238 | subnet=subnet, |
239 | interface=secondary_interface, |
240 | @@ -2177,78 +2152,7 @@ class TestMakeFailoverPeerConfig(MAASServerTestCase): |
241 | }, |
242 | primary_rack, |
243 | ), |
244 | - dhcp.make_failover_peer_config(vlan, secondary_rack, 4), |
245 | - ) |
246 | - |
247 | - # See https://bugs.launchpad.net/maas/+bug/2027621 |
248 | - def test_renders_config_for_secondary_should_not_mix_v4_and_v6_addresses( |
249 | - self, |
250 | - ): |
251 | - primary_rack = factory.make_RackController() |
252 | - secondary_rack = factory.make_RackController() |
253 | - vlan = factory.make_VLAN( |
254 | - dhcp_on=True, |
255 | - primary_rack=primary_rack, |
256 | - secondary_rack=secondary_rack, |
257 | - ) |
258 | - subnet_v4 = factory.make_Subnet(vlan=vlan, version=4) |
259 | - subnet_v6 = factory.make_Subnet(vlan=vlan, version=6) |
260 | - primary_interface = factory.make_Interface( |
261 | - INTERFACE_TYPE.PHYSICAL, node=primary_rack, vlan=vlan |
262 | - ) |
263 | - primary_ip_v4 = factory.make_StaticIPAddress( |
264 | - ip=factory.pick_ip_in_Subnet(subnet_v4), |
265 | - alloc_type=IPADDRESS_TYPE.AUTO, |
266 | - subnet=subnet_v4, |
267 | - interface=primary_interface, |
268 | - ) |
269 | - primary_ip_v6 = factory.make_StaticIPAddress( |
270 | - ip=factory.pick_ip_in_Subnet(subnet_v6), |
271 | - alloc_type=IPADDRESS_TYPE.AUTO, |
272 | - subnet=subnet_v6, |
273 | - interface=primary_interface, |
274 | - ) |
275 | - secondary_interface = factory.make_Interface( |
276 | - INTERFACE_TYPE.PHYSICAL, node=secondary_rack, vlan=vlan |
277 | - ) |
278 | - secondary_ip_v4 = factory.make_StaticIPAddress( |
279 | - ip=factory.pick_ip_in_Subnet(subnet_v4), |
280 | - alloc_type=IPADDRESS_TYPE.AUTO, |
281 | - subnet=subnet_v4, |
282 | - interface=secondary_interface, |
283 | - ) |
284 | - secondary_ip_v6 = factory.make_StaticIPAddress( |
285 | - ip=factory.pick_ip_in_Subnet(subnet_v6), |
286 | - alloc_type=IPADDRESS_TYPE.AUTO, |
287 | - subnet=subnet_v6, |
288 | - interface=secondary_interface, |
289 | - ) |
290 | - failover_peer_name = "failover-vlan-%d" % vlan.id |
291 | - self.assertEqual( |
292 | - ( |
293 | - failover_peer_name, |
294 | - { |
295 | - "name": failover_peer_name, |
296 | - "mode": "secondary", |
297 | - "address": str(secondary_ip_v4.ip), |
298 | - "peer_address": str(primary_ip_v4.ip), |
299 | - }, |
300 | - primary_rack, |
301 | - ), |
302 | - dhcp.make_failover_peer_config(vlan, secondary_rack, 4), |
303 | - ) |
304 | - self.assertEqual( |
305 | - ( |
306 | - failover_peer_name, |
307 | - { |
308 | - "name": failover_peer_name, |
309 | - "mode": "secondary", |
310 | - "address": str(secondary_ip_v6.ip), |
311 | - "peer_address": str(primary_ip_v6.ip), |
312 | - }, |
313 | - primary_rack, |
314 | - ), |
315 | - dhcp.make_failover_peer_config(vlan, secondary_rack, 6), |
316 | + dhcp.make_failover_peer_config(vlan, secondary_rack), |
317 | ) |
318 | |
319 | |
320 | diff --git a/src/metadataserver/builtin_scripts/commissioning_scripts/bmc_config.py b/src/metadataserver/builtin_scripts/commissioning_scripts/bmc_config.py |
321 | index 221289a..4da0512 100755 |
322 | --- a/src/metadataserver/builtin_scripts/commissioning_scripts/bmc_config.py |
323 | +++ b/src/metadataserver/builtin_scripts/commissioning_scripts/bmc_config.py |
324 | @@ -162,7 +162,7 @@ class IPMI(BMCConfig): |
325 | password=None, |
326 | ipmi_k_g="", |
327 | ipmi_privilege_level="", |
328 | - **kwargs, |
329 | + **kwargs |
330 | ): |
331 | self.username = username |
332 | self.password = password |
333 | @@ -174,7 +174,7 @@ class IPMI(BMCConfig): |
334 | def _bmc_get_config(self, section=None): |
335 | """Fetch and cache all BMC settings.""" |
336 | print("INFO: Reading current IPMI BMC values...") |
337 | - cmd = ["bmc-config", "--checkout", "--verbose"] |
338 | + cmd = ["bmc-config", "--checkout"] |
339 | if section: |
340 | cmd += ["-S", section] |
341 | try: |
342 | @@ -438,53 +438,41 @@ class IPMI(BMCConfig): |
343 | def _config_ipmi_lan_channel_settings(self): |
344 | """Enable IPMI-over-Lan (Lan_Channel) if it is disabled""" |
345 | print("INFO: Configuring IPMI Lan_Channel...") |
346 | + lan_channel = self._bmc_config.get("Lan_Channel", {}) |
347 | |
348 | - for channel in [ |
349 | - "Lan_Channel", |
350 | - "Lan_Channel_Channel_1", |
351 | - "Lan_Channel_Channel_2", |
352 | - "Lan_Channel_Channel_3", |
353 | + for key in [ |
354 | + "Volatile_Access_Mode", |
355 | + "Non_Volatile_Access_Mode", |
356 | ]: |
357 | - lan_channel = self._bmc_config.get(channel, {}) |
358 | - |
359 | - if not lan_channel: |
360 | - continue |
361 | - |
362 | - for key in [ |
363 | - "Volatile_Access_Mode", |
364 | - "Non_Volatile_Access_Mode", |
365 | - ]: |
366 | - if lan_channel.get(key) != "Always_Available": |
367 | + if lan_channel.get(key) != "Always_Available": |
368 | + print( |
369 | + "INFO: Enabling BMC network access - Lan_Channel:%s" % key |
370 | + ) |
371 | + # Some BMC's don't support setting Lan_Channel (see LP: #1287274). |
372 | + # If that happens, it would cause the script to fail preventing |
373 | + # the script from continuing. To address this, simply catch the |
374 | + # error, return and allow the script to continue. |
375 | + try: |
376 | + self._bmc_set("Lan_Channel", key, "Always_Available") |
377 | + except Exception: |
378 | print( |
379 | - "INFO: Enabling BMC network access - %s:%s" |
380 | - % (channel, key) |
381 | + "WARNING: Unable to set Lan_Channel:%s. " |
382 | + "BMC may be unavailable over the network!" % key |
383 | ) |
384 | - # Some BMC's don't support setting Lan_Channel (see LP: #1287274). |
385 | - # If that happens, it would cause the script to fail preventing |
386 | - # the script from continuing. To address this, simply catch the |
387 | - # error, return and allow the script to continue. |
388 | - try: |
389 | - self._bmc_set(channel, key, "Always_Available") |
390 | - except Exception: |
391 | - print( |
392 | - "WARNING: Unable to set %s:%s. " |
393 | - "BMC may be unavailable over the network!" |
394 | - % (channel, key) |
395 | - ) |
396 | - |
397 | - self._bmc_set_keys( |
398 | - channel, |
399 | - [ |
400 | - f"{auth_type}_{volatility}" |
401 | - for auth_type in [ |
402 | - "Enable_User_Level_Auth", |
403 | - "Enable_Per_Message_Auth", |
404 | - "Enable_Pef_Alerting", |
405 | - ] |
406 | - for volatility in ["Volatile", "Non_Volatile"] |
407 | - ], |
408 | - "Yes", |
409 | - ) |
410 | + |
411 | + self._bmc_set_keys( |
412 | + "Lan_Channel", |
413 | + [ |
414 | + "%s_%s" % (auth_type, volatility) |
415 | + for auth_type in [ |
416 | + "Enable_User_Level_Auth", |
417 | + "Enable_Per_Message_Auth", |
418 | + "Enable_Pef_Alerting", |
419 | + ] |
420 | + for volatility in ["Volatile", "Non_Volatile"] |
421 | + ], |
422 | + "Yes", |
423 | + ) |
424 | |
425 | def _config_lan_conf_auth(self): |
426 | """Configure Lan_Conf_Auth.""" |
427 | @@ -719,9 +707,6 @@ class IPMI(BMCConfig): |
428 | mac_address = None |
429 | for section_name, key in [ |
430 | ("Lan_Conf", "IP_Address"), |
431 | - ("Lan_Conf_Channel_1", "IP_Address"), |
432 | - ("Lan_Conf_Channel_2", "IP_Address"), |
433 | - ("Lan_Conf_Channel_3", "IP_Address"), |
434 | ("Lan6_Conf", "IPv6_Static_Addresses"), |
435 | ("Lan6_Conf", "IPv6_Dynamic_Addresses"), |
436 | ]: |
437 | @@ -744,28 +729,28 @@ class IPMI(BMCConfig): |
438 | time.sleep(2) |
439 | continue |
440 | if section_name.startswith("Lan6_"): |
441 | - return section_name, "[%s]" % ip, mac_address |
442 | - return section_name, ip, mac_address |
443 | + return "[%s]" % ip, mac_address |
444 | + return ip, mac_address |
445 | # No valid IP address was found. |
446 | - return None, None, mac_address |
447 | + return None, mac_address |
448 | |
449 | def get_bmc_ip(self): |
450 | """Configure and retreive IPMI BMC IP.""" |
451 | - section_name, ip_address, mac_address = self._get_bmc_ip() |
452 | + ip_address, mac_address = self._get_bmc_ip() |
453 | if ip_address: |
454 | return ip_address, mac_address |
455 | print("INFO: Attempting to enable preconfigured static IP on BMC...") |
456 | - self._bmc_set(section_name, "IP_Address_Source", "Static") |
457 | + self._bmc_set("Lan_Conf", "IP_Address_Source", "Static") |
458 | for _ in range(6): |
459 | time.sleep(10) |
460 | - _, ip_address, mac_address = self._get_bmc_ip(True) |
461 | + ip_address, mac_address = self._get_bmc_ip(True) |
462 | if ip_address: |
463 | return ip_address, mac_address |
464 | print("INFO: Attempting to enable DHCP on BMC...") |
465 | - self._bmc_set(section_name, "IP_Address_Source", "Use_DHCP") |
466 | + self._bmc_set("Lan_Conf", "IP_Address_Source", "Use_DHCP") |
467 | for _ in range(6): |
468 | time.sleep(10) |
469 | - _, ip_address, mac_address = self._get_bmc_ip(True) |
470 | + ip_address, mac_address = self._get_bmc_ip(True) |
471 | if ip_address: |
472 | print("WARNING: BMC is configured to use DHCP!") |
473 | return ip_address, mac_address |
474 | diff --git a/src/metadataserver/builtin_scripts/commissioning_scripts/tests/test_bmc_config.py b/src/metadataserver/builtin_scripts/commissioning_scripts/tests/test_bmc_config.py |
475 | index 73e84b0..90f4af1 100644 |
476 | --- a/src/metadataserver/builtin_scripts/commissioning_scripts/tests/test_bmc_config.py |
477 | +++ b/src/metadataserver/builtin_scripts/commissioning_scripts/tests/test_bmc_config.py |
478 | @@ -538,25 +538,20 @@ EndSection |
479 | self.assertRaises(SystemExit, self.ipmi.add_bmc_user) |
480 | |
481 | def test_set_ipmi_lan_channel_setting_verifies(self): |
482 | - |
483 | - for channel in [ |
484 | - "Lan_Channel", |
485 | - "Lan_Channel_Channel_1", |
486 | - "Lan_Channel_Channel_2", |
487 | - "Lan_Channel_Channel_3", |
488 | - ]: |
489 | - self.ipmi._bmc_config = { |
490 | - channel: { |
491 | - "Volatile_Access_Mode": "Always_Available", |
492 | - "Non_Volatile_Access_Mode": "Always_Available", |
493 | - }, |
494 | + self.ipmi._bmc_config = { |
495 | + "Lan_Channel": { |
496 | + "Volatile_Access_Mode": "Always_Available", |
497 | + "Non_Volatile_Access_Mode": "Always_Available", |
498 | } |
499 | - mock_bmc_set = self.patch(self.ipmi, "_bmc_set") |
500 | - mock_bmc_set_keys = self.patch(self.ipmi, "_bmc_set_keys") |
501 | - self.ipmi._config_ipmi_lan_channel_settings() |
502 | - self.assertFalse(mock_bmc_set.called) |
503 | - mock_bmc_set_keys.assert_called_once_with( |
504 | - channel, |
505 | + } |
506 | + mock_bmc_set = self.patch(self.ipmi, "_bmc_set") |
507 | + mock_bmc_set_keys = self.patch(self.ipmi, "_bmc_set_keys") |
508 | + self.ipmi._config_ipmi_lan_channel_settings() |
509 | + self.assertThat(mock_bmc_set, MockNotCalled()) |
510 | + self.assertThat( |
511 | + mock_bmc_set_keys, |
512 | + MockCalledOnceWith( |
513 | + "Lan_Channel", |
514 | [ |
515 | "%s_%s" % (auth_type, volatility) |
516 | for auth_type in [ |
517 | @@ -567,36 +562,36 @@ EndSection |
518 | for volatility in ["Volatile", "Non_Volatile"] |
519 | ], |
520 | "Yes", |
521 | - ) |
522 | + ), |
523 | + ) |
524 | |
525 | def test_set_ipmi_lan_channel_setting_enables(self): |
526 | - for channel in [ |
527 | - "Lan_Channel", |
528 | - "Lan_Channel_Channel_1", |
529 | - "Lan_Channel_Channel_2", |
530 | - "Lan_Channel_Channel_3", |
531 | - ]: |
532 | - self.ipmi._bmc_config = { |
533 | - channel: { |
534 | - "Volatile_Access_Mode": "Disabled", |
535 | - "Non_Volatile_Access_Mode": "Pre_Boot_only", |
536 | - }, |
537 | + self.ipmi._bmc_config = { |
538 | + "Lan_Channel": { |
539 | + "Volatile_Access_Mode": "Disabled", |
540 | + "Non_Volatile_Access_Mode": "Pre_Boot_only", |
541 | } |
542 | - mock_bmc_set = self.patch(self.ipmi, "_bmc_set") |
543 | - mock_bmc_set_keys = self.patch(self.ipmi, "_bmc_set_keys") |
544 | - self.ipmi._config_ipmi_lan_channel_settings() |
545 | - mock_bmc_set.assert_has_calls( |
546 | - ( |
547 | - call(channel, "Volatile_Access_Mode", "Always_Available"), |
548 | - call( |
549 | - channel, |
550 | - "Non_Volatile_Access_Mode", |
551 | - "Always_Available", |
552 | - ), |
553 | - ) |
554 | - ) |
555 | - mock_bmc_set_keys.assert_called_once_with( |
556 | - channel, |
557 | + } |
558 | + mock_bmc_set = self.patch(self.ipmi, "_bmc_set") |
559 | + mock_bmc_set_keys = self.patch(self.ipmi, "_bmc_set_keys") |
560 | + self.ipmi._config_ipmi_lan_channel_settings() |
561 | + self.assertThat( |
562 | + mock_bmc_set, |
563 | + MockCallsMatch( |
564 | + call( |
565 | + "Lan_Channel", "Volatile_Access_Mode", "Always_Available" |
566 | + ), |
567 | + call( |
568 | + "Lan_Channel", |
569 | + "Non_Volatile_Access_Mode", |
570 | + "Always_Available", |
571 | + ), |
572 | + ), |
573 | + ) |
574 | + self.assertThat( |
575 | + mock_bmc_set_keys, |
576 | + MockCalledOnceWith( |
577 | + "Lan_Channel", |
578 | [ |
579 | "%s_%s" % (auth_type, volatility) |
580 | for auth_type in [ |
581 | @@ -607,7 +602,8 @@ EndSection |
582 | for volatility in ["Volatile", "Non_Volatile"] |
583 | ], |
584 | "Yes", |
585 | - ) |
586 | + ), |
587 | + ) |
588 | |
589 | def test_config_lan_conf_auth(self): |
590 | self.ipmi._bmc_config = {"Lan_Channel_Auth": {}} |
591 | @@ -947,9 +943,7 @@ EndSection |
592 | "MAC_Address": mac_address, |
593 | } |
594 | } |
595 | - self.assertEqual( |
596 | - ("Lan_Conf", ip, mac_address), self.ipmi._get_bmc_ip() |
597 | - ) |
598 | + self.assertEqual((ip, mac_address), self.ipmi._get_bmc_ip()) |
599 | |
600 | def test_get_bmc_ipv6_static(self): |
601 | ip = factory.make_ipv6_address() |
602 | @@ -960,9 +954,7 @@ EndSection |
603 | "MAC_Address": mac_address, |
604 | } |
605 | } |
606 | - self.assertEqual( |
607 | - ("Lan6_Conf", f"[{ip}]", mac_address), self.ipmi._get_bmc_ip() |
608 | - ) |
609 | + self.assertEqual((f"[{ip}]", mac_address), self.ipmi._get_bmc_ip()) |
610 | |
611 | def test_get_bmc_ipv6_dynamic(self): |
612 | ip = factory.make_ipv6_address() |
613 | @@ -973,9 +965,7 @@ EndSection |
614 | "MAC_Address": mac_address, |
615 | } |
616 | } |
617 | - self.assertEqual( |
618 | - ("Lan6_Conf", f"[{ip}]", mac_address), self.ipmi._get_bmc_ip() |
619 | - ) |
620 | + self.assertEqual((f"[{ip}]", mac_address), self.ipmi._get_bmc_ip()) |
621 | |
622 | def test_get_bmc_ipv6_gets_mac_From_ipv4(self): |
623 | ip = factory.make_ipv6_address() |
624 | @@ -984,20 +974,18 @@ EndSection |
625 | "Lan_Conf": {"MAC_Address": mac_address}, |
626 | "Lan6_Conf": {"IPv6_Dynamic_Addresses": ip}, |
627 | } |
628 | - self.assertEqual( |
629 | - ("Lan6_Conf", f"[{ip}]", mac_address), self.ipmi._get_bmc_ip() |
630 | - ) |
631 | + self.assertEqual((f"[{ip}]", mac_address), self.ipmi._get_bmc_ip()) |
632 | |
633 | def test_get_bmc_ip_finds_none(self): |
634 | self.patch(self.ipmi, "_bmc_get").return_value = "" |
635 | - self.assertEqual((None, None, None), self.ipmi._get_bmc_ip()) |
636 | + self.assertEqual((None, None), self.ipmi._get_bmc_ip()) |
637 | |
638 | def test_get_bmc_ip(self): |
639 | ip = factory.make_ip_address() |
640 | mac_address = factory.make_mac_address() |
641 | mock_bmc_set = self.patch(self.ipmi, "_bmc_set") |
642 | mock_get_bmc_ip = self.patch(self.ipmi, "_get_bmc_ip") |
643 | - mock_get_bmc_ip.return_value = None, ip, mac_address |
644 | + mock_get_bmc_ip.return_value = ip, mac_address |
645 | |
646 | self.assertEqual((ip, mac_address), self.ipmi.get_bmc_ip()) |
647 | self.assertThat(mock_bmc_set, MockNotCalled()) |
648 | @@ -1009,9 +997,9 @@ EndSection |
649 | mock_bmc_set = self.patch(self.ipmi, "_bmc_set") |
650 | mock_get_bmc_ip = self.patch(self.ipmi, "_get_bmc_ip") |
651 | mock_get_bmc_ip.side_effect = ( |
652 | - ("Lan_Conf", None, mac_address), |
653 | - ("Lan_Conf", None, mac_address), |
654 | - ("Lan_Conf", ip, mac_address), |
655 | + (None, mac_address), |
656 | + (None, mac_address), |
657 | + (ip, mac_address), |
658 | ) |
659 | |
660 | self.assertEqual((ip, mac_address), self.ipmi.get_bmc_ip()) |
661 | @@ -1029,8 +1017,8 @@ EndSection |
662 | mock_bmc_set = self.patch(self.ipmi, "_bmc_set") |
663 | mock_get_bmc_ip = self.patch(self.ipmi, "_get_bmc_ip") |
664 | mock_get_bmc_ip.side_effect = ( |
665 | - *[("Lan_Conf", None, mac_address) for _ in range(8)], |
666 | - ("Lan_Conf", ip, mac_address), |
667 | + *[(None, mac_address) for _ in range(8)], |
668 | + (ip, mac_address), |
669 | ) |
670 | |
671 | self.assertEqual((ip, mac_address), self.ipmi.get_bmc_ip()) |
672 | @@ -1041,7 +1029,6 @@ EndSection |
673 | call("Lan_Conf", "IP_Address_Source", "Use_DHCP"), |
674 | ), |
675 | ) |
676 | - |
677 | self.assertThat( |
678 | mock_get_bmc_ip, |
679 | MockCallsMatch(call(), *[call(True) for _ in range(8)]), |
680 | @@ -1050,7 +1037,7 @@ EndSection |
681 | def test_get_bmc_ip_fails(self): |
682 | mock_bmc_set = self.patch(self.ipmi, "_bmc_set") |
683 | mock_get_bmc_ip = self.patch(self.ipmi, "_get_bmc_ip") |
684 | - mock_get_bmc_ip.return_value = ("Lan_Conf", None, None) |
685 | + mock_get_bmc_ip.return_value = (None, None) |
686 | |
687 | self.assertRaises(SystemExit, self.ipmi.get_bmc_ip) |
688 | self.assertThat( |
UNIT TESTS
-b 3.1 lp:~mfo/maas/+git/maas into -b 3.1 lp:~maas-committers/maas
STATUS: SUCCESS a1dd141440b2ed6 e7bd6ea678
COMMIT: 9a57e03fb199af5