Merge ~mfo/maas:3.1 into maas: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)
Reviewer Review Type Date Requested Status
MAAS Lander Approve
Mauricio Faria de Oliveira Pending
Review via email: mp+450510@code.launchpad.net

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: 9a57e03fb199af5a1dd141440b2ed6e7bd6ea678

review: Approve
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: 209cc3eb6038b5e6f3dc673b847eb5fdb2ac3120

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: 2761b73c5d63e3dfb95de363a9ec3f50b998e0c6

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: 5ad7060e524668a7eff438fa21fe5bd2199e4ff1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/creds.yaml b/creds.yaml
2deleted file mode 100644
3index e69de29..0000000
4--- a/creds.yaml
5+++ /dev/null
6diff --git a/debian/changelog b/debian/changelog
7index 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.
20diff --git a/setup.cfg b/setup.cfg
21index 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/
32diff --git a/src/maasserver/dhcp.py b/src/maasserver/dhcp.py
33index 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
104diff --git a/src/maasserver/tests/test_dhcp.py b/src/maasserver/tests/test_dhcp.py
105index 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
320diff --git a/src/metadataserver/builtin_scripts/commissioning_scripts/bmc_config.py b/src/metadataserver/builtin_scripts/commissioning_scripts/bmc_config.py
321index 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
474diff --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
475index 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(

Subscribers

People subscribed via source and target branches