Merge ~blake-rouse/maas:fix-1820998 into maas:master

Proposed by Blake Rouse
Status: Merged
Approved by: Blake Rouse
Approved revision: b6c50d27b3b703ad58b78a4d3148b7a2ac7a0298
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~blake-rouse/maas:fix-1820998
Merge into: maas:master
Diff against target: 111 lines (+23/-2)
4 files modified
src/maasserver/models/node.py (+5/-0)
src/maasserver/models/tests/test_node.py (+10/-2)
src/metadataserver/builtin_scripts/hooks.py (+6/-0)
src/metadataserver/builtin_scripts/tests/test_hooks.py (+2/-0)
Reviewer Review Type Date Requested Status
Andres Rodriguez (community) Approve
Lee Trager (community) Approve
MAAS Lander Approve
Newell Jensen (community) Approve
Review via email: mp+365123@code.launchpad.net

Commit message

Fixes LP: #1820998 - Reset skip_storage and skip_networking on running of commissioning hooks as well on failure for starting of commissioning and testing.

To post a comment you must log in.
Revision history for this message
Newell Jensen (newell-jensen) wrote :

LGTM

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

UNIT TESTS
-b fix-1820998 lp:~blake-rouse/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: b6c50d27b3b703ad58b78a4d3148b7a2ac7a0298

review: Approve
Revision history for this message
Lee Trager (ltrager) wrote :

LGTM!

review: Approve
Revision history for this message
Andres Rodriguez (andreserl) wrote :

lgtm! please backport this!

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

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/models/node.py b/src/maasserver/models/node.py
2index 205b45e..f4d04a9 100644
3--- a/src/maasserver/models/node.py
4+++ b/src/maasserver/models/node.py
5@@ -2025,6 +2025,10 @@ class Node(CleanSave, TimestampedModel):
6 allow_power_cycle=True, config=config)
7 except Exception as error:
8 self.status = old_status
9+ self.enable_ssh = False
10+ self.skip_bmc_config = False
11+ self.skip_networking = False
12+ self.skip_storage = False
13 self.save()
14 maaslog.error(
15 "%s: Could not start node for commissioning: %s",
16@@ -2146,6 +2150,7 @@ class Node(CleanSave, TimestampedModel):
17 cycling = self._power_cycle()
18 except Exception as error:
19 self.status = old_status
20+ self.enable_ssh = False
21 self.save()
22 maaslog.error(
23 "%s: Could not start testing for node: %s",
24diff --git a/src/maasserver/models/tests/test_node.py b/src/maasserver/models/tests/test_node.py
25index c29dd5a..7254699 100644
26--- a/src/maasserver/models/tests/test_node.py
27+++ b/src/maasserver/models/tests/test_node.py
28@@ -3018,7 +3018,9 @@ class TestNode(MAASServerTestCase):
29
30 try:
31 with transaction.atomic():
32- node.start_commissioning(admin)
33+ node.start_commissioning(
34+ admin, enable_ssh=True, skip_bmc_config=True,
35+ skip_networking=True, skip_storage=True)
36 except node_start.side_effect.__class__:
37 # We don't care about the error here, so suppress it. It
38 # exists only to cause the transaction to abort.
39@@ -3030,6 +3032,10 @@ class TestNode(MAASServerTestCase):
40 admin, generate_user_data_for_status.return_value,
41 NODE_STATUS.NEW, allow_power_cycle=True, config=config))
42 self.assertEqual(NODE_STATUS.NEW, node.status)
43+ self.assertFalse(node.enable_ssh)
44+ self.assertFalse(node.skip_bmc_config)
45+ self.assertFalse(node.skip_networking)
46+ self.assertFalse(node.skip_storage)
47
48 def test_start_commissioning_logs_and_raises_errors_in_starting(self):
49 admin = factory.make_admin()
50@@ -3380,7 +3386,8 @@ class TestNode(MAASServerTestCase):
51
52 try:
53 with transaction.atomic():
54- node.start_testing(admin, testing_scripts=[script.name])
55+ node.start_testing(
56+ admin, enable_ssh=True, testing_scripts=[script.name])
57 except mock_node_power_cycle.side_effect.__class__:
58 # We don't care about the error here, so suppress it. It
59 # exists only to cause the transaction to abort.
60@@ -3388,6 +3395,7 @@ class TestNode(MAASServerTestCase):
61
62 self.expectThat(mock_node_power_cycle, MockCalledOnceWith())
63 self.expectThat(NODE_STATUS.DEPLOYED, Equals(node.status))
64+ self.assertFalse(node.enable_ssh)
65
66 def test_start_testing_logs_and_raises_errors(self):
67 script = factory.make_Script(script_type=SCRIPT_TYPE.TESTING)
68diff --git a/src/metadataserver/builtin_scripts/hooks.py b/src/metadataserver/builtin_scripts/hooks.py
69index 0012e40..e0509ca 100644
70--- a/src/metadataserver/builtin_scripts/hooks.py
71+++ b/src/metadataserver/builtin_scripts/hooks.py
72@@ -164,6 +164,9 @@ def update_node_network_information(node, output, exit_status):
73
74 # Skip network configuration if set by the user.
75 if node.skip_networking:
76+ # Turn off skip_networking now that the hook has been called.
77+ node.skip_networking = False
78+ node.save(update_fields=['skip_networking'])
79 return
80
81 # Get the MAC addresses of all connected interfaces.
82@@ -498,6 +501,9 @@ def update_node_physical_block_devices(node, output, exit_status):
83
84 # Skip storage configuration if set by the user.
85 if node.skip_storage:
86+ # Turn off skip_storage now that the hook has been called.
87+ node.skip_storage = False
88+ node.save(update_fields=['skip_storage'])
89 return
90
91 try:
92diff --git a/src/metadataserver/builtin_scripts/tests/test_hooks.py b/src/metadataserver/builtin_scripts/tests/test_hooks.py
93index bf99b95..13c0f0e 100644
94--- a/src/metadataserver/builtin_scripts/tests/test_hooks.py
95+++ b/src/metadataserver/builtin_scripts/tests/test_hooks.py
96@@ -1039,6 +1039,7 @@ class TestUpdateNodePhysicalBlockDevices(MAASServerTestCase):
97 block_device = factory.make_PhysicalBlockDevice(node=node)
98 update_node_physical_block_devices(node, b"garbage", exit_status=0)
99 self.assertIsNotNone(reload_object(block_device))
100+ self.assertFalse(reload_object(node).skip_storage)
101
102 def test__removes_previous_physical_block_devices(self):
103 node = factory.make_Node()
104@@ -1452,6 +1453,7 @@ class TestUpdateNodeNetworkInformation(MAASServerTestCase):
105 boot_interface = node.get_boot_interface()
106 update_node_network_information(node, self.IP_ADDR_OUTPUT, 0)
107 self.assertIsNotNone(reload_object(boot_interface))
108+ self.assertFalse(reload_object(node).skip_networking)
109
110 def test__add_all_interfaces(self):
111 """Test a node that has no previously known interfaces on which we

Subscribers

People subscribed via source and target branches