Merge lp:~andreserl/maas/lp1604962_lp1604987 into lp:~maas-committers/maas/trunk
- lp1604962_lp1604987
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Andres Rodriguez |
Approved revision: | no longer in the source branch. |
Merged at revision: | 5204 |
Proposed branch: | lp:~andreserl/maas/lp1604962_lp1604987 |
Merge into: | lp:~maas-committers/maas/trunk |
Diff against target: |
291 lines (+85/-40) 7 files modified
src/maasserver/models/node.py (+33/-20) src/maasserver/models/tests/test_node.py (+12/-3) src/maasserver/rpc/nodes.py (+1/-1) src/maasserver/status_monitor.py (+1/-1) src/metadataserver/api.py (+18/-12) src/metadataserver/tests/test_api_status.py (+5/-3) src/provisioningserver/events.py (+15/-0) |
To merge this branch: | bzr merge lp:~andreserl/maas/lp1604962_lp1604987 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Andres Rodriguez (community) | Approve | ||
Gavin Panella (community) | Approve | ||
Review via email: mp+300978@code.launchpad.net |
Commit message
Fixes to correctly log cloud-init/curtin FAIL events in the node event log.
Fixes to correctly log "mark_failed" events. We did this by combining the mark_failed with _mark_failed functions, provided that the latter wasn't really storing anything in the event log and it should. It now differentiates between a user driven "Mark Failed" vs a system driven.
Description of the change
MAAS Lander (maas-lander) wrote : | # |
The attempt to merge lp:~andreserl/maas/lp1604962_lp1604987 into lp:maas failed. Below is the output from the failed tests.
Hit:1 http://
Hit:2 http://
Get:3 http://
Hit:4 http://
Fetched 95.7 kB in 0s (193 kB/s)
Reading package lists...
sudo DEBIAN_
--no-
Reading package lists...
Building dependency tree...
Reading state information...
archdetect-deb is already the newest version (1.117ubuntu2).
authbind is already the newest version (2.1.1+nmu1).
build-essential is already the newest version (12.1ubuntu2).
curl is already the newest version (7.47.0-1ubuntu2).
debhelper is already the newest version (9.20160115ubun
distro-info is already the newest version (0.14build1).
freeipmi-tools is already the newest version (1.4.11-1ubuntu1).
git is already the newest version (1:2.7.4-0ubuntu1).
libjs-angularjs is already the newest version (1.2.28-1ubuntu2).
libjs-jquery is already the newest version (1.11.3+dfsg-4).
libjs-yui3-full is already the newest version (3.5.1-1ubuntu3).
libjs-yui3-min is already the newest version (3.5.1-1ubuntu3).
make is already the newest version (4.1-6).
postgresql is already the newest version (9.5+173).
pxelinux is already the newest version (3:6.03+
python-formencode is already the newest version (1.3.0-0ubuntu5).
python-lxml is already the newest version (3.5.0-1build1).
python-netaddr is already the newest version (0.7.18-1).
python-netifaces is already the newes...
MAAS Lander (maas-lander) wrote : | # |
The attempt to merge lp:~andreserl/maas/lp1604962_lp1604987 into lp:maas failed. Below is the output from the failed tests.
Get:1 http://
Hit:2 http://
Get:3 http://
Hit:4 http://
Get:5 http://
Get:6 http://
Get:7 http://
Fetched 257 kB in 0s (529 kB/s)
Reading package lists...
sudo DEBIAN_
--no-
Reading package lists...
Building dependency tree...
Reading state information...
archdetect-deb is already the newest version (1.117ubuntu2).
authbind is already the newest version (2.1.1+nmu1).
build-essential is already the newest version (12.1ubuntu2).
curl is already the newest version (7.47.0-1ubuntu2).
debhelper is already the newest version (9.20160115ubun
distro-info is already the newest version (0.14build1).
freeipmi-tools is already the newest version (1.4.11-1ubuntu1).
git is already the newest version (1:2.7.4-0ubuntu1).
libjs-angularjs is already the newest version (1.2.28-1ubuntu2).
libjs-jquery is already the newest version (1.11.3+dfsg-4).
libjs-yui3-full is already the newest version (3.5.1-1ubuntu3).
libjs-yui3-min is already the newest version (3.5.1-1ubuntu3).
make is already the newest version (4.1-6).
postgresql is already the newest version (9.5+173).
pxelinux is...
MAAS Lander (maas-lander) wrote : | # |
There are additional revisions which have not been approved in review. Please seek review and approval of these new revisions.
Andres Rodriguez (andreserl) : | # |
Preview Diff
1 | === modified file 'src/maasserver/models/node.py' | |||
2 | --- src/maasserver/models/node.py 2016-07-21 23:33:35 +0000 | |||
3 | +++ src/maasserver/models/node.py 2016-07-25 22:18:24 +0000 | |||
4 | @@ -1132,20 +1132,29 @@ | |||
5 | 1132 | 1132 | ||
6 | 1133 | def _register_request_event( | 1133 | def _register_request_event( |
7 | 1134 | self, user, type_name, action='', comment=None): | 1134 | self, user, type_name, action='', comment=None): |
10 | 1135 | """Register a node user request event.""" | 1135 | """Register a node request event. |
11 | 1136 | # don't register system generated non-user requests | 1136 | |
12 | 1137 | It registers events like start_commission (started by a user), | ||
13 | 1138 | or mark_failed (started by the system)""" | ||
14 | 1139 | |||
15 | 1140 | # the description will be the comment, if any. | ||
16 | 1141 | description = comment if comment else '' | ||
17 | 1142 | # if the user exists, we need to construct the description with | ||
18 | 1143 | # the user. as it would be a user-driven request. | ||
19 | 1137 | if user is not None: | 1144 | if user is not None: |
31 | 1138 | event_details = EVENT_DETAILS[type_name] | 1145 | if len(description) == 0: |
32 | 1139 | description = "(%s)" % user.username | 1146 | description = "(%s)" % user |
33 | 1140 | if comment: | 1147 | else: |
34 | 1141 | description = "%s - %s" % (description, comment) | 1148 | description = "(%s) - %s" % (user, description) |
35 | 1142 | # Avoid circular imports. | 1149 | event_details = EVENT_DETAILS[type_name] |
36 | 1143 | from maasserver.models.event import Event | 1150 | |
37 | 1144 | Event.objects.register_event_and_event_type( | 1151 | # Avoid circular imports. |
38 | 1145 | self.system_id, type_name, type_level=event_details.level, | 1152 | from maasserver.models.event import Event |
39 | 1146 | type_description=event_details.description, | 1153 | Event.objects.register_event_and_event_type( |
40 | 1147 | event_action=action, | 1154 | self.system_id, type_name, type_level=event_details.level, |
41 | 1148 | event_description=description) | 1155 | type_description=event_details.description, |
42 | 1156 | event_action=action, | ||
43 | 1157 | event_description=description) | ||
44 | 1149 | 1158 | ||
45 | 1150 | def storage_layout_issues(self): | 1159 | def storage_layout_issues(self): |
46 | 1151 | """Return any errors with the storage layout. | 1160 | """Return any errors with the storage layout. |
47 | @@ -2408,18 +2417,22 @@ | |||
48 | 2408 | arch, subarch = self.architecture.split('/') | 2417 | arch, subarch = self.architecture.split('/') |
49 | 2409 | return (arch, subarch) | 2418 | return (arch, subarch) |
50 | 2410 | 2419 | ||
58 | 2411 | def mark_failed(self, user, comment=None): | 2420 | def mark_failed(self, user=None, comment=None, commit=True): |
52 | 2412 | self._register_request_event( | ||
53 | 2413 | user, EVENT_TYPES.REQUEST_NODE_MARK_FAILED, action='mark_failed', | ||
54 | 2414 | comment=comment) | ||
55 | 2415 | self._mark_failed(user, comment) | ||
56 | 2416 | |||
57 | 2417 | def _mark_failed(self, user, comment=None, commit=True): | ||
59 | 2418 | """Mark this node as failed. | 2421 | """Mark this node as failed. |
60 | 2419 | 2422 | ||
61 | 2420 | The actual 'failed' state depends on the current status of the | 2423 | The actual 'failed' state depends on the current status of the |
62 | 2421 | node. | 2424 | node. |
63 | 2422 | """ | 2425 | """ |
64 | 2426 | if user is None: | ||
65 | 2427 | # This is a system-driven event. Log level is ERROR. | ||
66 | 2428 | event_type = EVENT_TYPES.REQUEST_NODE_MARK_FAILED_SYSTEM | ||
67 | 2429 | else: | ||
68 | 2430 | # This is a user-driven event. Log level is INFO. | ||
69 | 2431 | event_type = EVENT_TYPES.REQUEST_NODE_MARK_FAILED | ||
70 | 2432 | self._register_request_event( | ||
71 | 2433 | user, event_type, action='mark_failed', | ||
72 | 2434 | comment=comment) | ||
73 | 2435 | |||
74 | 2423 | new_status = get_failed_status(self.status) | 2436 | new_status = get_failed_status(self.status) |
75 | 2424 | if new_status is not None: | 2437 | if new_status is not None: |
76 | 2425 | self.status = new_status | 2438 | self.status = new_status |
77 | 2426 | 2439 | ||
78 | === modified file 'src/maasserver/models/tests/test_node.py' | |||
79 | --- src/maasserver/models/tests/test_node.py 2016-07-18 20:06:21 +0000 | |||
80 | +++ src/maasserver/models/tests/test_node.py 2016-07-25 22:18:24 +0000 | |||
81 | @@ -3148,14 +3148,23 @@ | |||
82 | 3148 | event_action=event_action, | 3148 | event_action=event_action, |
83 | 3149 | event_description=event_description)) | 3149 | event_description=event_description)) |
84 | 3150 | 3150 | ||
86 | 3151 | def test__register_request_event_with_none_user_saves_no_event(self): | 3151 | def test__register_request_event_none_user_saves_comment_not_user(self): |
87 | 3152 | node = factory.make_Node() | 3152 | node = factory.make_Node() |
88 | 3153 | log_mock = self.patch_autospec( | 3153 | log_mock = self.patch_autospec( |
89 | 3154 | Event.objects, 'register_event_and_event_type') | 3154 | Event.objects, 'register_event_and_event_type') |
90 | 3155 | event_name = EVENT_TYPES.REQUEST_NODE_START | 3155 | event_name = EVENT_TYPES.REQUEST_NODE_START |
91 | 3156 | event_action = factory.make_name('action') | ||
92 | 3157 | event_details = EVENT_DETAILS[event_name] | ||
93 | 3156 | comment = factory.make_name("comment") | 3158 | comment = factory.make_name("comment") |
96 | 3157 | node._register_request_event(None, event_name, comment) | 3159 | event_description = "%s" % (comment) |
97 | 3158 | self.assertThat(log_mock, MockNotCalled()) | 3160 | node._register_request_event(None, event_name, event_action, comment) |
98 | 3161 | self.assertThat(log_mock, MockCalledOnceWith( | ||
99 | 3162 | node.system_id, | ||
100 | 3163 | EVENT_TYPES.REQUEST_NODE_START, | ||
101 | 3164 | type_level=event_details.level, | ||
102 | 3165 | type_description=event_details.description, | ||
103 | 3166 | event_action=event_action, | ||
104 | 3167 | event_description=event_description)) | ||
105 | 3159 | 3168 | ||
106 | 3160 | def test__status_message_returns_most_recent_event(self): | 3169 | def test__status_message_returns_most_recent_event(self): |
107 | 3161 | # The first event won't be returned. | 3170 | # The first event won't be returned. |
108 | 3162 | 3171 | ||
109 | === modified file 'src/maasserver/rpc/nodes.py' | |||
110 | --- src/maasserver/rpc/nodes.py 2016-05-11 00:25:14 +0000 | |||
111 | +++ src/maasserver/rpc/nodes.py 2016-07-25 22:18:24 +0000 | |||
112 | @@ -49,7 +49,7 @@ | |||
113 | 49 | except Node.DoesNotExist: | 49 | except Node.DoesNotExist: |
114 | 50 | raise NoSuchNode.from_system_id(system_id) | 50 | raise NoSuchNode.from_system_id(system_id) |
115 | 51 | try: | 51 | try: |
117 | 52 | node.mark_failed(None, error_description) | 52 | node.mark_failed(comment=error_description) |
118 | 53 | except exceptions.NodeStateViolation as e: | 53 | except exceptions.NodeStateViolation as e: |
119 | 54 | raise NodeStateViolation(e) | 54 | raise NodeStateViolation(e) |
120 | 55 | 55 | ||
121 | 56 | 56 | ||
122 | === modified file 'src/maasserver/status_monitor.py' | |||
123 | --- src/maasserver/status_monitor.py 2016-07-22 14:41:58 +0000 | |||
124 | +++ src/maasserver/status_monitor.py 2016-07-25 22:18:24 +0000 | |||
125 | @@ -43,7 +43,7 @@ | |||
126 | 43 | NODE_STATUS_CHOICES_DICT[node.status], | 43 | NODE_STATUS_CHOICES_DICT[node.status], |
127 | 44 | NODE_FAILURE_MONITORED_STATUS_TIMEOUTS[node.status], | 44 | NODE_FAILURE_MONITORED_STATUS_TIMEOUTS[node.status], |
128 | 45 | ) | 45 | ) |
130 | 46 | node._mark_failed(None, commit=False, comment=comment) | 46 | node.mark_failed(commit=False, comment=comment) |
131 | 47 | node.status_expires = None | 47 | node.status_expires = None |
132 | 48 | node.save() | 48 | node.save() |
133 | 49 | 49 | ||
134 | 50 | 50 | ||
135 | === modified file 'src/metadataserver/api.py' | |||
136 | --- src/metadataserver/api.py 2016-07-22 00:41:50 +0000 | |||
137 | +++ src/metadataserver/api.py 2016-07-25 22:18:24 +0000 | |||
138 | @@ -157,12 +157,19 @@ | |||
139 | 157 | raise UnknownMetadataVersion("Unknown metadata version: %s" % version) | 157 | raise UnknownMetadataVersion("Unknown metadata version: %s" % version) |
140 | 158 | 158 | ||
141 | 159 | 159 | ||
143 | 160 | def add_event_to_node_event_log(node, origin, action, description): | 160 | def add_event_to_node_event_log( |
144 | 161 | node, origin, action, description, result=None): | ||
145 | 161 | """Add an entry to the node's event log.""" | 162 | """Add an entry to the node's event log.""" |
146 | 162 | if node.status == NODE_STATUS.COMMISSIONING: | 163 | if node.status == NODE_STATUS.COMMISSIONING: |
148 | 163 | type_name = EVENT_TYPES.NODE_COMMISSIONING_EVENT | 164 | if result in ['SUCCESS', None]: |
149 | 165 | type_name = EVENT_TYPES.NODE_COMMISSIONING_EVENT | ||
150 | 166 | else: | ||
151 | 167 | type_name = EVENT_TYPES.NODE_COMMISSIONING_EVENT_FAILED | ||
152 | 164 | elif node.status == NODE_STATUS.DEPLOYING: | 168 | elif node.status == NODE_STATUS.DEPLOYING: |
154 | 165 | type_name = EVENT_TYPES.NODE_INSTALL_EVENT | 169 | if result in ['SUCCESS', None]: |
155 | 170 | type_name = EVENT_TYPES.NODE_INSTALL_EVENT | ||
156 | 171 | else: | ||
157 | 172 | type_name = EVENT_TYPES.NODE_INSTALL_EVENT_FAILED | ||
158 | 166 | elif node.node_type in [ | 173 | elif node.node_type in [ |
159 | 167 | NODE_TYPE.RACK_CONTROLLER, | 174 | NODE_TYPE.RACK_CONTROLLER, |
160 | 168 | NODE_TYPE.REGION_AND_RACK_CONTROLLER]: | 175 | NODE_TYPE.REGION_AND_RACK_CONTROLLER]: |
161 | @@ -327,7 +334,8 @@ | |||
162 | 327 | result = message.get('result') | 334 | result = message.get('result') |
163 | 328 | 335 | ||
164 | 329 | # Add this event to the node event log. | 336 | # Add this event to the node event log. |
166 | 330 | add_event_to_node_event_log(node, origin, activity_name, description) | 337 | add_event_to_node_event_log( |
167 | 338 | node, origin, activity_name, description, result) | ||
168 | 331 | 339 | ||
169 | 332 | # Save attached files, if any. | 340 | # Save attached files, if any. |
170 | 333 | for sent_file in message.get('files', []): | 341 | for sent_file in message.get('files', []): |
171 | @@ -358,12 +366,11 @@ | |||
172 | 358 | elif node.status == NODE_STATUS.DEPLOYING: | 366 | elif node.status == NODE_STATUS.DEPLOYING: |
173 | 359 | if result in ['FAIL', 'FAILURE']: | 367 | if result in ['FAIL', 'FAILURE']: |
174 | 360 | node.mark_failed( | 368 | node.mark_failed( |
178 | 361 | None, | 369 | comment="Installation failed (refer to the " |
179 | 362 | "Installation failed (refer to the " | 370 | "installation log for more information).") |
177 | 363 | "installation log for more information).") | ||
180 | 364 | elif node.status == NODE_STATUS.DISK_ERASING: | 371 | elif node.status == NODE_STATUS.DISK_ERASING: |
181 | 365 | if result in ['FAIL', 'FAILURE']: | 372 | if result in ['FAIL', 'FAILURE']: |
183 | 366 | node.mark_failed(None, "Failed to erase disks.") | 373 | node.mark_failed(comment="Failed to erase disks.") |
184 | 367 | 374 | ||
185 | 368 | # Deallocate the node if we enter any terminal state. | 375 | # Deallocate the node if we enter any terminal state. |
186 | 369 | if node.node_type == NODE_TYPE.MACHINE and node.status in [ | 376 | if node.node_type == NODE_TYPE.MACHINE and node.status in [ |
187 | @@ -530,16 +537,15 @@ | |||
188 | 530 | self._store_installation_results(node, request) | 537 | self._store_installation_results(node, request) |
189 | 531 | if status == SIGNAL_STATUS.FAILED: | 538 | if status == SIGNAL_STATUS.FAILED: |
190 | 532 | node.mark_failed( | 539 | node.mark_failed( |
194 | 533 | None, | 540 | comment="Installation failed (refer to the " |
195 | 534 | "Installation failed (refer to the " | 541 | "installation log for more information).") |
193 | 535 | "installation log for more information).") | ||
196 | 536 | target_status = None | 542 | target_status = None |
197 | 537 | elif node.status == NODE_STATUS.DISK_ERASING: | 543 | elif node.status == NODE_STATUS.DISK_ERASING: |
198 | 538 | if status == SIGNAL_STATUS.OK: | 544 | if status == SIGNAL_STATUS.OK: |
199 | 539 | # disk erasing complete, release node | 545 | # disk erasing complete, release node |
200 | 540 | node.release() | 546 | node.release() |
201 | 541 | elif status == SIGNAL_STATUS.FAILED: | 547 | elif status == SIGNAL_STATUS.FAILED: |
203 | 542 | node.mark_failed(None, "Failed to erase disks.") | 548 | node.mark_failed(comment="Failed to erase disks.") |
204 | 543 | target_status = None | 549 | target_status = None |
205 | 544 | 550 | ||
206 | 545 | if target_status in (None, node.status): | 551 | if target_status in (None, node.status): |
207 | 546 | 552 | ||
208 | === modified file 'src/metadataserver/tests/test_api_status.py' | |||
209 | --- src/metadataserver/tests/test_api_status.py 2016-06-11 23:58:38 +0000 | |||
210 | +++ src/metadataserver/tests/test_api_status.py 2016-07-25 22:18:24 +0000 | |||
211 | @@ -193,7 +193,8 @@ | |||
212 | 193 | NODE_STATUS.FAILED_DEPLOYMENT, reload_object(node).status) | 193 | NODE_STATUS.FAILED_DEPLOYMENT, reload_object(node).status) |
213 | 194 | # Check last node event. | 194 | # Check last node event. |
214 | 195 | self.assertEqual( | 195 | self.assertEqual( |
216 | 196 | "'curtin' Command Install", | 196 | "Installation failed (refer to the installation" |
217 | 197 | " log for more information).", | ||
218 | 197 | Event.objects.filter(node=node).last().description) | 198 | Event.objects.filter(node=node).last().description) |
219 | 198 | 199 | ||
220 | 199 | def test_status_installation_fail_leaves_node_failed(self): | 200 | def test_status_installation_fail_leaves_node_failed(self): |
221 | @@ -212,7 +213,8 @@ | |||
222 | 212 | NODE_STATUS.FAILED_DEPLOYMENT, reload_object(node).status) | 213 | NODE_STATUS.FAILED_DEPLOYMENT, reload_object(node).status) |
223 | 213 | # Check last node event. | 214 | # Check last node event. |
224 | 214 | self.assertEqual( | 215 | self.assertEqual( |
226 | 215 | "'curtin' Command Install", | 216 | "Installation failed (refer to the installation" |
227 | 217 | " log for more information).", | ||
228 | 216 | Event.objects.filter(node=node).last().description) | 218 | Event.objects.filter(node=node).last().description) |
229 | 217 | 219 | ||
230 | 218 | def test_status_installation_failure_doesnt_clear_owner(self): | 220 | def test_status_installation_failure_doesnt_clear_owner(self): |
231 | @@ -270,7 +272,7 @@ | |||
232 | 270 | NODE_STATUS.FAILED_DISK_ERASING, reload_object(node).status) | 272 | NODE_STATUS.FAILED_DISK_ERASING, reload_object(node).status) |
233 | 271 | # Check last node event. | 273 | # Check last node event. |
234 | 272 | self.assertEqual( | 274 | self.assertEqual( |
236 | 273 | "'curtin' Erasing disk", | 275 | "Failed to erase disks.", |
237 | 274 | Event.objects.filter(node=node).last().description) | 276 | Event.objects.filter(node=node).last().description) |
238 | 275 | 277 | ||
239 | 276 | def test_status_erasure_failure_does_not_populate_tags(self): | 278 | def test_status_erasure_failure_does_not_populate_tags(self): |
240 | 277 | 279 | ||
241 | === modified file 'src/provisioningserver/events.py' | |||
242 | --- src/provisioningserver/events.py 2016-07-13 19:03:15 +0000 | |||
243 | +++ src/provisioningserver/events.py 2016-07-25 22:18:24 +0000 | |||
244 | @@ -66,7 +66,9 @@ | |||
245 | 66 | # Node status events | 66 | # Node status events |
246 | 67 | NODE_STATUS_EVENT = "NODE_STATUS_EVENT" | 67 | NODE_STATUS_EVENT = "NODE_STATUS_EVENT" |
247 | 68 | NODE_COMMISSIONING_EVENT = "NODE_COMMISSIONING_EVENT" | 68 | NODE_COMMISSIONING_EVENT = "NODE_COMMISSIONING_EVENT" |
248 | 69 | NODE_COMMISSIONING_EVENT_FAILED = "NODE_COMMISSIONING_EVENT_FAILED" | ||
249 | 69 | NODE_INSTALL_EVENT = "NODE_INSTALL_EVENT" | 70 | NODE_INSTALL_EVENT = "NODE_INSTALL_EVENT" |
250 | 71 | NODE_INSTALL_EVENT_FAILED = "NODE_INSTALL_EVENT_FAILED" | ||
251 | 70 | # Node user request events | 72 | # Node user request events |
252 | 71 | REQUEST_NODE_START_COMMISSIONING = "REQUEST_NODE_START_COMMISSIONING" | 73 | REQUEST_NODE_START_COMMISSIONING = "REQUEST_NODE_START_COMMISSIONING" |
253 | 72 | REQUEST_NODE_ABORT_COMMISSIONING = "REQUEST_NODE_ABORT_COMMISSIONING" | 74 | REQUEST_NODE_ABORT_COMMISSIONING = "REQUEST_NODE_ABORT_COMMISSIONING" |
254 | @@ -76,6 +78,7 @@ | |||
255 | 76 | REQUEST_NODE_ABORT_ERASE_DISK = "REQUEST_NODE_ABORT_ERASE_DISK" | 78 | REQUEST_NODE_ABORT_ERASE_DISK = "REQUEST_NODE_ABORT_ERASE_DISK" |
256 | 77 | REQUEST_NODE_RELEASE = "REQUEST_NODE_RELEASE" | 79 | REQUEST_NODE_RELEASE = "REQUEST_NODE_RELEASE" |
257 | 78 | REQUEST_NODE_MARK_FAILED = "REQUEST_NODE_MARK_FAILED" | 80 | REQUEST_NODE_MARK_FAILED = "REQUEST_NODE_MARK_FAILED" |
258 | 81 | REQUEST_NODE_MARK_FAILED_SYSTEM = "REQUEST_NODE_MARK_FAILED_SYSTEM" | ||
259 | 79 | REQUEST_NODE_MARK_BROKEN = "REQUEST_NODE_MARK_BROKEN" | 82 | REQUEST_NODE_MARK_BROKEN = "REQUEST_NODE_MARK_BROKEN" |
260 | 80 | REQUEST_NODE_MARK_FIXED = "REQUEST_NODE_MARK_FIXED" | 83 | REQUEST_NODE_MARK_FIXED = "REQUEST_NODE_MARK_FIXED" |
261 | 81 | REQUEST_NODE_START_DEPLOYMENT = "REQUEST_NODE_START_DEPLOYMENT" | 84 | REQUEST_NODE_START_DEPLOYMENT = "REQUEST_NODE_START_DEPLOYMENT" |
262 | @@ -151,10 +154,18 @@ | |||
263 | 151 | description="Node commissioning", | 154 | description="Node commissioning", |
264 | 152 | level=DEBUG, | 155 | level=DEBUG, |
265 | 153 | ), | 156 | ), |
266 | 157 | EVENT_TYPES.NODE_COMMISSIONING_EVENT_FAILED: EventDetail( | ||
267 | 158 | description="Node commissioning failure", | ||
268 | 159 | level=ERROR, | ||
269 | 160 | ), | ||
270 | 154 | EVENT_TYPES.NODE_INSTALL_EVENT: EventDetail( | 161 | EVENT_TYPES.NODE_INSTALL_EVENT: EventDetail( |
271 | 155 | description="Node installation", | 162 | description="Node installation", |
272 | 156 | level=DEBUG, | 163 | level=DEBUG, |
273 | 157 | ), | 164 | ), |
274 | 165 | EVENT_TYPES.NODE_INSTALL_EVENT_FAILED: EventDetail( | ||
275 | 166 | description="Node installation failure", | ||
276 | 167 | level=ERROR, | ||
277 | 168 | ), | ||
278 | 158 | EVENT_TYPES.REQUEST_NODE_START_COMMISSIONING: EventDetail( | 169 | EVENT_TYPES.REQUEST_NODE_START_COMMISSIONING: EventDetail( |
279 | 159 | description="User starting node commissioning", | 170 | description="User starting node commissioning", |
280 | 160 | level=INFO, | 171 | level=INFO, |
281 | @@ -187,6 +198,10 @@ | |||
282 | 187 | description="User marking node failed", | 198 | description="User marking node failed", |
283 | 188 | level=INFO, | 199 | level=INFO, |
284 | 189 | ), | 200 | ), |
285 | 201 | EVENT_TYPES.REQUEST_NODE_MARK_FAILED_SYSTEM: EventDetail( | ||
286 | 202 | description="Marking node failed", | ||
287 | 203 | level=ERROR, | ||
288 | 204 | ), | ||
289 | 190 | EVENT_TYPES.REQUEST_NODE_MARK_BROKEN: EventDetail( | 205 | EVENT_TYPES.REQUEST_NODE_MARK_BROKEN: EventDetail( |
290 | 191 | description="User marking node broken", | 206 | description="User marking node broken", |
291 | 192 | level=INFO, | 207 | level=INFO, |
Looks good, with a few minor comments.