Merge ~ltrager/maas:lp1879416_2.7 into maas:2.7

Proposed by Lee Trager
Status: Merged
Approved by: Lee Trager
Approved revision: 369e046daa953ee0b9613150000bd2e82142cad9
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~ltrager/maas:lp1879416_2.7
Merge into: maas:2.7
Diff against target: 108 lines (+28/-18)
3 files modified
src/maasserver/models/tests/test_node.py (+17/-15)
src/metadataserver/models/scriptresult.py (+7/-1)
src/metadataserver/models/tests/test_scriptresult.py (+4/-2)
Reviewer Review Type Date Requested Status
MAAS Lander Needs Fixing
Lee Trager (community) Approve
Review via email: mp+384222@code.launchpad.net

Commit message

Backport of 84f687c LP: #1879416 - Mark commissioning scripts as failed if processing errored

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

UNIT TESTS
-b lp1879416_2.7 lp:~ltrager/maas/+git/maas into -b 2.7 lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas/job/branch-tester/7554/console
COMMIT: 8bf9dca69516984b69b28ec1a1fab8061f91febe

review: Needs Fixing

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/models/tests/test_node.py b/src/maasserver/models/tests/test_node.py
2index e34af88..4d12207 100644
3--- a/src/maasserver/models/tests/test_node.py
4+++ b/src/maasserver/models/tests/test_node.py
5@@ -10483,11 +10483,10 @@ class TestUpdateInterfaces(MAASServerTestCase, UpdateInterfacesMixin):
6
7 def test__new_physical_with_multiple_dhcp_link_with_resource_info(self):
8 controller = self.create_empty_controller(with_empty_script_sets=True)
9- mac_address = factory.make_mac_address()
10 interfaces = {
11 "eth0": {
12 "type": "physical",
13- "mac_address": mac_address,
14+ "mac_address": "00:00:00:00:00:01",
15 "parents": [],
16 "links": [{"mode": "dhcp"}, {"mode": "dhcp"}],
17 "enabled": True,
18@@ -10503,19 +10502,22 @@ class TestUpdateInterfaces(MAASServerTestCase, UpdateInterfacesMixin):
19 lxd_script = controller.current_commissioning_script_set.find_script_result(
20 script_name=LXD_OUTPUT_NAME
21 )
22- lxd_script_output = {
23- "network": {
24- "cards": [
25- {
26- "ports": [
27- {"id": "eth0", "address": mac_address, "port": 0}
28- ],
29- "vendor": vendor,
30- "product": product,
31- "firmware_version": firmware_version,
32- }
33- ]
34- }
35+ lxd_script_output = deepcopy(test_hooks.SAMPLE_LXD_JSON)
36+ lxd_script_output["network"] = {
37+ "cards": [
38+ {
39+ "ports": [
40+ {
41+ "id": "eth0",
42+ "address": "00:00:00:00:00:01",
43+ "port": 0,
44+ }
45+ ],
46+ "vendor": vendor,
47+ "product": product,
48+ "firmware_version": firmware_version,
49+ }
50+ ]
51 }
52 lxd_script.store_result(
53 0, stdout=json.dumps(lxd_script_output).encode("utf-8")
54diff --git a/src/metadataserver/models/scriptresult.py b/src/metadataserver/models/scriptresult.py
55index 355746e..ebeef91 100644
56--- a/src/metadataserver/models/scriptresult.py
57+++ b/src/metadataserver/models/scriptresult.py
58@@ -378,7 +378,7 @@ class ScriptResult(CleanSave, TimestampedModel):
59 # Circular imports.
60 from metadataserver.api import try_or_log_event
61
62- try_or_log_event(
63+ signal_status = try_or_log_event(
64 self.script_set.node,
65 None,
66 err,
67@@ -387,6 +387,12 @@ class ScriptResult(CleanSave, TimestampedModel):
68 output=self.stdout,
69 exit_status=self.exit_status,
70 )
71+ # If the script failed to process mark the script as failed to
72+ # prevent testing from running and help users identify where
73+ # the error came from. This can happen when a commissioning
74+ # script generated invalid output.
75+ if signal_status is not None:
76+ self.status = SCRIPT_STATUS.FAILED
77
78 if (
79 self.status == SCRIPT_STATUS.PASSED
80diff --git a/src/metadataserver/models/tests/test_scriptresult.py b/src/metadataserver/models/tests/test_scriptresult.py
81index ccce2e8..6c0b79a 100644
82--- a/src/metadataserver/models/tests/test_scriptresult.py
83+++ b/src/metadataserver/models/tests/test_scriptresult.py
84@@ -338,7 +338,6 @@ class TestScriptResult(MAASServerTestCase):
85 script_result = factory.make_ScriptResult(
86 script_set=script_set, status=SCRIPT_STATUS.RUNNING
87 )
88- exit_status = random.randint(0, 255)
89
90 def _raise():
91 raise Exception()
92@@ -349,12 +348,15 @@ class TestScriptResult(MAASServerTestCase):
93 self.addCleanup(
94 scriptresult_module.NODE_INFO_SCRIPTS.pop, script_result.name
95 )
96- script_result.store_result(exit_status, stdout=b"")
97+ script_result.store_result(0, stdout=b"")
98 expected_event = Event.objects.first()
99 self.assertThat(
100 expected_event.description,
101 DocTestMatches("...failed during post-processing."),
102 )
103+ self.assertEquals(
104+ reload_object(script_result).status, SCRIPT_STATUS.FAILED
105+ )
106
107 def test_store_result_on_recommission_script_resets_builtin_commiss(self):
108 script_set = factory.make_ScriptSet(

Subscribers

People subscribed via source and target branches