Merge lp:~andreserl/maas/lp1604962_lp1604987 into lp:~maas-committers/maas/trunk

Proposed by Andres Rodriguez
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
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.

To post a comment you must log in.
Revision history for this message
Gavin Panella (allenap) wrote :

Looks good, with a few minor comments.

review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :
Download full text (31.3 KiB)

The attempt to merge lp:~andreserl/maas/lp1604962_lp1604987 into lp:maas failed. Below is the output from the failed tests.

Hit:1 http://security.ubuntu.com/ubuntu xenial-security InRelease
Hit:2 http://prodstack-zone-2.clouds.archive.ubuntu.com/ubuntu xenial InRelease
Get:3 http://prodstack-zone-2.clouds.archive.ubuntu.com/ubuntu xenial-updates InRelease [95.7 kB]
Hit:4 http://prodstack-zone-2.clouds.archive.ubuntu.com/ubuntu xenial-backports InRelease
Fetched 95.7 kB in 0s (193 kB/s)
Reading package lists...
sudo DEBIAN_FRONTEND=noninteractive apt-get -y \
    --no-install-recommends install apache2 archdetect-deb authbind bash bind9 bind9utils build-essential bzr bzr-builddeb chromium-browser chromium-chromedriver curl daemontools debhelper dh-apport dh-systemd distro-info dnsutils firefox freeipmi-tools git gjs ipython isc-dhcp-common libjs-angularjs libjs-jquery libjs-jquery-hotkeys libjs-yui3-full libjs-yui3-min libpq-dev make nodejs-legacy npm postgresql pxelinux python3-all python3-apt python3-bson python3-convoy python3-crochet python3-cssselect python3-curtin python3-dev python3-distro-info python3-django python3-django-nose python3-django-piston3 python3-dnspython python3-docutils python3-formencode python3-hivex python3-httplib2 python3-jinja2 python3-jsonschema python3-lxml python3-netaddr python3-netifaces python3-novaclient python3-oauth python3-oauthlib python3-openssl python3-paramiko python3-petname python3-pexpect python3-psycopg2 python3-pyinotify python3-pyparsing python3-pyvmomi python3-requests python3-seamicroclient python3-setuptools python3-simplestreams python3-sphinx python3-tempita python3-twisted python3-txtftp python3-tz python3-yaml python3-zope.interface python-bson python-crochet python-django python-django-piston python-djorm-ext-pgarray python-formencode python-lxml python-netaddr python-netifaces python-pocket-lint python-psycopg2 python-simplejson python-tempita python-twisted python-yaml socat syslinux-common tgt ubuntu-cloudimage-keyring wget xvfb
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.20160115ubuntu3).
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+dfsg-11ubuntu1).
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...

Revision history for this message
MAAS Lander (maas-lander) wrote :
Download full text (31.6 KiB)

The attempt to merge lp:~andreserl/maas/lp1604962_lp1604987 into lp:maas failed. Below is the output from the failed tests.

Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [94.5 kB]
Hit:2 http://prodstack-zone-2.clouds.archive.ubuntu.com/ubuntu xenial InRelease
Get:3 http://prodstack-zone-2.clouds.archive.ubuntu.com/ubuntu xenial-updates InRelease [95.7 kB]
Hit:4 http://prodstack-zone-2.clouds.archive.ubuntu.com/ubuntu xenial-backports InRelease
Get:5 http://security.ubuntu.com/ubuntu xenial-security/universe Sources [8,948 B]
Get:6 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [36.4 kB]
Get:7 http://security.ubuntu.com/ubuntu xenial-security/universe Translation-en [22.0 kB]
Fetched 257 kB in 0s (529 kB/s)
Reading package lists...
sudo DEBIAN_FRONTEND=noninteractive apt-get -y \
    --no-install-recommends install apache2 archdetect-deb authbind bash bind9 bind9utils build-essential bzr bzr-builddeb chromium-browser chromium-chromedriver curl daemontools debhelper dh-apport dh-systemd distro-info dnsutils firefox freeipmi-tools git gjs ipython isc-dhcp-common libjs-angularjs libjs-jquery libjs-jquery-hotkeys libjs-yui3-full libjs-yui3-min libpq-dev make nodejs-legacy npm postgresql pxelinux python3-all python3-apt python3-bson python3-convoy python3-crochet python3-cssselect python3-curtin python3-dev python3-distro-info python3-django python3-django-nose python3-django-piston3 python3-dnspython python3-docutils python3-formencode python3-hivex python3-httplib2 python3-jinja2 python3-jsonschema python3-lxml python3-netaddr python3-netifaces python3-novaclient python3-oauth python3-oauthlib python3-openssl python3-paramiko python3-petname python3-pexpect python3-psycopg2 python3-pyinotify python3-pyparsing python3-pyvmomi python3-requests python3-seamicroclient python3-setuptools python3-simplestreams python3-sphinx python3-tempita python3-twisted python3-txtftp python3-tz python3-yaml python3-zope.interface python-bson python-crochet python-django python-django-piston python-djorm-ext-pgarray python-formencode python-lxml python-netaddr python-netifaces python-pocket-lint python-psycopg2 python-simplejson python-tempita python-twisted python-yaml socat syslinux-common tgt ubuntu-cloudimage-keyring wget xvfb
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.20160115ubuntu3).
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...

Revision history for this message
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.

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

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/maasserver/models/node.py'
--- src/maasserver/models/node.py 2016-07-21 23:33:35 +0000
+++ src/maasserver/models/node.py 2016-07-25 22:18:24 +0000
@@ -1132,20 +1132,29 @@
11321132
1133 def _register_request_event(1133 def _register_request_event(
1134 self, user, type_name, action='', comment=None):1134 self, user, type_name, action='', comment=None):
1135 """Register a node user request event."""1135 """Register a node request event.
1136 # don't register system generated non-user requests1136
1137 It registers events like start_commission (started by a user),
1138 or mark_failed (started by the system)"""
1139
1140 # the description will be the comment, if any.
1141 description = comment if comment else ''
1142 # if the user exists, we need to construct the description with
1143 # the user. as it would be a user-driven request.
1137 if user is not None:1144 if user is not None:
1138 event_details = EVENT_DETAILS[type_name]1145 if len(description) == 0:
1139 description = "(%s)" % user.username1146 description = "(%s)" % user
1140 if comment:1147 else:
1141 description = "%s - %s" % (description, comment)1148 description = "(%s) - %s" % (user, description)
1142 # Avoid circular imports.1149 event_details = EVENT_DETAILS[type_name]
1143 from maasserver.models.event import Event1150
1144 Event.objects.register_event_and_event_type(1151 # Avoid circular imports.
1145 self.system_id, type_name, type_level=event_details.level,1152 from maasserver.models.event import Event
1146 type_description=event_details.description,1153 Event.objects.register_event_and_event_type(
1147 event_action=action,1154 self.system_id, type_name, type_level=event_details.level,
1148 event_description=description)1155 type_description=event_details.description,
1156 event_action=action,
1157 event_description=description)
11491158
1150 def storage_layout_issues(self):1159 def storage_layout_issues(self):
1151 """Return any errors with the storage layout.1160 """Return any errors with the storage layout.
@@ -2408,18 +2417,22 @@
2408 arch, subarch = self.architecture.split('/')2417 arch, subarch = self.architecture.split('/')
2409 return (arch, subarch)2418 return (arch, subarch)
24102419
2411 def mark_failed(self, user, comment=None):2420 def mark_failed(self, user=None, comment=None, commit=True):
2412 self._register_request_event(
2413 user, EVENT_TYPES.REQUEST_NODE_MARK_FAILED, action='mark_failed',
2414 comment=comment)
2415 self._mark_failed(user, comment)
2416
2417 def _mark_failed(self, user, comment=None, commit=True):
2418 """Mark this node as failed.2421 """Mark this node as failed.
24192422
2420 The actual 'failed' state depends on the current status of the2423 The actual 'failed' state depends on the current status of the
2421 node.2424 node.
2422 """2425 """
2426 if user is None:
2427 # This is a system-driven event. Log level is ERROR.
2428 event_type = EVENT_TYPES.REQUEST_NODE_MARK_FAILED_SYSTEM
2429 else:
2430 # This is a user-driven event. Log level is INFO.
2431 event_type = EVENT_TYPES.REQUEST_NODE_MARK_FAILED
2432 self._register_request_event(
2433 user, event_type, action='mark_failed',
2434 comment=comment)
2435
2423 new_status = get_failed_status(self.status)2436 new_status = get_failed_status(self.status)
2424 if new_status is not None:2437 if new_status is not None:
2425 self.status = new_status2438 self.status = new_status
24262439
=== modified file 'src/maasserver/models/tests/test_node.py'
--- src/maasserver/models/tests/test_node.py 2016-07-18 20:06:21 +0000
+++ src/maasserver/models/tests/test_node.py 2016-07-25 22:18:24 +0000
@@ -3148,14 +3148,23 @@
3148 event_action=event_action,3148 event_action=event_action,
3149 event_description=event_description))3149 event_description=event_description))
31503150
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):
3152 node = factory.make_Node()3152 node = factory.make_Node()
3153 log_mock = self.patch_autospec(3153 log_mock = self.patch_autospec(
3154 Event.objects, 'register_event_and_event_type')3154 Event.objects, 'register_event_and_event_type')
3155 event_name = EVENT_TYPES.REQUEST_NODE_START3155 event_name = EVENT_TYPES.REQUEST_NODE_START
3156 event_action = factory.make_name('action')
3157 event_details = EVENT_DETAILS[event_name]
3156 comment = factory.make_name("comment")3158 comment = factory.make_name("comment")
3157 node._register_request_event(None, event_name, comment)3159 event_description = "%s" % (comment)
3158 self.assertThat(log_mock, MockNotCalled())3160 node._register_request_event(None, event_name, event_action, comment)
3161 self.assertThat(log_mock, MockCalledOnceWith(
3162 node.system_id,
3163 EVENT_TYPES.REQUEST_NODE_START,
3164 type_level=event_details.level,
3165 type_description=event_details.description,
3166 event_action=event_action,
3167 event_description=event_description))
31593168
3160 def test__status_message_returns_most_recent_event(self):3169 def test__status_message_returns_most_recent_event(self):
3161 # The first event won't be returned.3170 # The first event won't be returned.
31623171
=== modified file 'src/maasserver/rpc/nodes.py'
--- src/maasserver/rpc/nodes.py 2016-05-11 00:25:14 +0000
+++ src/maasserver/rpc/nodes.py 2016-07-25 22:18:24 +0000
@@ -49,7 +49,7 @@
49 except Node.DoesNotExist:49 except Node.DoesNotExist:
50 raise NoSuchNode.from_system_id(system_id)50 raise NoSuchNode.from_system_id(system_id)
51 try:51 try:
52 node.mark_failed(None, error_description)52 node.mark_failed(comment=error_description)
53 except exceptions.NodeStateViolation as e:53 except exceptions.NodeStateViolation as e:
54 raise NodeStateViolation(e)54 raise NodeStateViolation(e)
5555
5656
=== modified file 'src/maasserver/status_monitor.py'
--- src/maasserver/status_monitor.py 2016-07-22 14:41:58 +0000
+++ src/maasserver/status_monitor.py 2016-07-25 22:18:24 +0000
@@ -43,7 +43,7 @@
43 NODE_STATUS_CHOICES_DICT[node.status],43 NODE_STATUS_CHOICES_DICT[node.status],
44 NODE_FAILURE_MONITORED_STATUS_TIMEOUTS[node.status],44 NODE_FAILURE_MONITORED_STATUS_TIMEOUTS[node.status],
45 )45 )
46 node._mark_failed(None, commit=False, comment=comment)46 node.mark_failed(commit=False, comment=comment)
47 node.status_expires = None47 node.status_expires = None
48 node.save()48 node.save()
4949
5050
=== modified file 'src/metadataserver/api.py'
--- src/metadataserver/api.py 2016-07-22 00:41:50 +0000
+++ src/metadataserver/api.py 2016-07-25 22:18:24 +0000
@@ -157,12 +157,19 @@
157 raise UnknownMetadataVersion("Unknown metadata version: %s" % version)157 raise UnknownMetadataVersion("Unknown metadata version: %s" % version)
158158
159159
160def add_event_to_node_event_log(node, origin, action, description):160def add_event_to_node_event_log(
161 node, origin, action, description, result=None):
161 """Add an entry to the node's event log."""162 """Add an entry to the node's event log."""
162 if node.status == NODE_STATUS.COMMISSIONING:163 if node.status == NODE_STATUS.COMMISSIONING:
163 type_name = EVENT_TYPES.NODE_COMMISSIONING_EVENT164 if result in ['SUCCESS', None]:
165 type_name = EVENT_TYPES.NODE_COMMISSIONING_EVENT
166 else:
167 type_name = EVENT_TYPES.NODE_COMMISSIONING_EVENT_FAILED
164 elif node.status == NODE_STATUS.DEPLOYING:168 elif node.status == NODE_STATUS.DEPLOYING:
165 type_name = EVENT_TYPES.NODE_INSTALL_EVENT169 if result in ['SUCCESS', None]:
170 type_name = EVENT_TYPES.NODE_INSTALL_EVENT
171 else:
172 type_name = EVENT_TYPES.NODE_INSTALL_EVENT_FAILED
166 elif node.node_type in [173 elif node.node_type in [
167 NODE_TYPE.RACK_CONTROLLER,174 NODE_TYPE.RACK_CONTROLLER,
168 NODE_TYPE.REGION_AND_RACK_CONTROLLER]:175 NODE_TYPE.REGION_AND_RACK_CONTROLLER]:
@@ -327,7 +334,8 @@
327 result = message.get('result')334 result = message.get('result')
328335
329 # Add this event to the node event log.336 # Add this event to the node event log.
330 add_event_to_node_event_log(node, origin, activity_name, description)337 add_event_to_node_event_log(
338 node, origin, activity_name, description, result)
331339
332 # Save attached files, if any.340 # Save attached files, if any.
333 for sent_file in message.get('files', []):341 for sent_file in message.get('files', []):
@@ -358,12 +366,11 @@
358 elif node.status == NODE_STATUS.DEPLOYING:366 elif node.status == NODE_STATUS.DEPLOYING:
359 if result in ['FAIL', 'FAILURE']:367 if result in ['FAIL', 'FAILURE']:
360 node.mark_failed(368 node.mark_failed(
361 None,369 comment="Installation failed (refer to the "
362 "Installation failed (refer to the "370 "installation log for more information).")
363 "installation log for more information).")
364 elif node.status == NODE_STATUS.DISK_ERASING:371 elif node.status == NODE_STATUS.DISK_ERASING:
365 if result in ['FAIL', 'FAILURE']:372 if result in ['FAIL', 'FAILURE']:
366 node.mark_failed(None, "Failed to erase disks.")373 node.mark_failed(comment="Failed to erase disks.")
367374
368 # Deallocate the node if we enter any terminal state.375 # Deallocate the node if we enter any terminal state.
369 if node.node_type == NODE_TYPE.MACHINE and node.status in [376 if node.node_type == NODE_TYPE.MACHINE and node.status in [
@@ -530,16 +537,15 @@
530 self._store_installation_results(node, request)537 self._store_installation_results(node, request)
531 if status == SIGNAL_STATUS.FAILED:538 if status == SIGNAL_STATUS.FAILED:
532 node.mark_failed(539 node.mark_failed(
533 None,540 comment="Installation failed (refer to the "
534 "Installation failed (refer to the "541 "installation log for more information).")
535 "installation log for more information).")
536 target_status = None542 target_status = None
537 elif node.status == NODE_STATUS.DISK_ERASING:543 elif node.status == NODE_STATUS.DISK_ERASING:
538 if status == SIGNAL_STATUS.OK:544 if status == SIGNAL_STATUS.OK:
539 # disk erasing complete, release node545 # disk erasing complete, release node
540 node.release()546 node.release()
541 elif status == SIGNAL_STATUS.FAILED:547 elif status == SIGNAL_STATUS.FAILED:
542 node.mark_failed(None, "Failed to erase disks.")548 node.mark_failed(comment="Failed to erase disks.")
543 target_status = None549 target_status = None
544550
545 if target_status in (None, node.status):551 if target_status in (None, node.status):
546552
=== modified file 'src/metadataserver/tests/test_api_status.py'
--- src/metadataserver/tests/test_api_status.py 2016-06-11 23:58:38 +0000
+++ src/metadataserver/tests/test_api_status.py 2016-07-25 22:18:24 +0000
@@ -193,7 +193,8 @@
193 NODE_STATUS.FAILED_DEPLOYMENT, reload_object(node).status)193 NODE_STATUS.FAILED_DEPLOYMENT, reload_object(node).status)
194 # Check last node event.194 # Check last node event.
195 self.assertEqual(195 self.assertEqual(
196 "'curtin' Command Install",196 "Installation failed (refer to the installation"
197 " log for more information).",
197 Event.objects.filter(node=node).last().description)198 Event.objects.filter(node=node).last().description)
198199
199 def test_status_installation_fail_leaves_node_failed(self):200 def test_status_installation_fail_leaves_node_failed(self):
@@ -212,7 +213,8 @@
212 NODE_STATUS.FAILED_DEPLOYMENT, reload_object(node).status)213 NODE_STATUS.FAILED_DEPLOYMENT, reload_object(node).status)
213 # Check last node event.214 # Check last node event.
214 self.assertEqual(215 self.assertEqual(
215 "'curtin' Command Install",216 "Installation failed (refer to the installation"
217 " log for more information).",
216 Event.objects.filter(node=node).last().description)218 Event.objects.filter(node=node).last().description)
217219
218 def test_status_installation_failure_doesnt_clear_owner(self):220 def test_status_installation_failure_doesnt_clear_owner(self):
@@ -270,7 +272,7 @@
270 NODE_STATUS.FAILED_DISK_ERASING, reload_object(node).status)272 NODE_STATUS.FAILED_DISK_ERASING, reload_object(node).status)
271 # Check last node event.273 # Check last node event.
272 self.assertEqual(274 self.assertEqual(
273 "'curtin' Erasing disk",275 "Failed to erase disks.",
274 Event.objects.filter(node=node).last().description)276 Event.objects.filter(node=node).last().description)
275277
276 def test_status_erasure_failure_does_not_populate_tags(self):278 def test_status_erasure_failure_does_not_populate_tags(self):
277279
=== modified file 'src/provisioningserver/events.py'
--- src/provisioningserver/events.py 2016-07-13 19:03:15 +0000
+++ src/provisioningserver/events.py 2016-07-25 22:18:24 +0000
@@ -66,7 +66,9 @@
66 # Node status events66 # Node status events
67 NODE_STATUS_EVENT = "NODE_STATUS_EVENT"67 NODE_STATUS_EVENT = "NODE_STATUS_EVENT"
68 NODE_COMMISSIONING_EVENT = "NODE_COMMISSIONING_EVENT"68 NODE_COMMISSIONING_EVENT = "NODE_COMMISSIONING_EVENT"
69 NODE_COMMISSIONING_EVENT_FAILED = "NODE_COMMISSIONING_EVENT_FAILED"
69 NODE_INSTALL_EVENT = "NODE_INSTALL_EVENT"70 NODE_INSTALL_EVENT = "NODE_INSTALL_EVENT"
71 NODE_INSTALL_EVENT_FAILED = "NODE_INSTALL_EVENT_FAILED"
70 # Node user request events72 # Node user request events
71 REQUEST_NODE_START_COMMISSIONING = "REQUEST_NODE_START_COMMISSIONING"73 REQUEST_NODE_START_COMMISSIONING = "REQUEST_NODE_START_COMMISSIONING"
72 REQUEST_NODE_ABORT_COMMISSIONING = "REQUEST_NODE_ABORT_COMMISSIONING"74 REQUEST_NODE_ABORT_COMMISSIONING = "REQUEST_NODE_ABORT_COMMISSIONING"
@@ -76,6 +78,7 @@
76 REQUEST_NODE_ABORT_ERASE_DISK = "REQUEST_NODE_ABORT_ERASE_DISK"78 REQUEST_NODE_ABORT_ERASE_DISK = "REQUEST_NODE_ABORT_ERASE_DISK"
77 REQUEST_NODE_RELEASE = "REQUEST_NODE_RELEASE"79 REQUEST_NODE_RELEASE = "REQUEST_NODE_RELEASE"
78 REQUEST_NODE_MARK_FAILED = "REQUEST_NODE_MARK_FAILED"80 REQUEST_NODE_MARK_FAILED = "REQUEST_NODE_MARK_FAILED"
81 REQUEST_NODE_MARK_FAILED_SYSTEM = "REQUEST_NODE_MARK_FAILED_SYSTEM"
79 REQUEST_NODE_MARK_BROKEN = "REQUEST_NODE_MARK_BROKEN"82 REQUEST_NODE_MARK_BROKEN = "REQUEST_NODE_MARK_BROKEN"
80 REQUEST_NODE_MARK_FIXED = "REQUEST_NODE_MARK_FIXED"83 REQUEST_NODE_MARK_FIXED = "REQUEST_NODE_MARK_FIXED"
81 REQUEST_NODE_START_DEPLOYMENT = "REQUEST_NODE_START_DEPLOYMENT"84 REQUEST_NODE_START_DEPLOYMENT = "REQUEST_NODE_START_DEPLOYMENT"
@@ -151,10 +154,18 @@
151 description="Node commissioning",154 description="Node commissioning",
152 level=DEBUG,155 level=DEBUG,
153 ),156 ),
157 EVENT_TYPES.NODE_COMMISSIONING_EVENT_FAILED: EventDetail(
158 description="Node commissioning failure",
159 level=ERROR,
160 ),
154 EVENT_TYPES.NODE_INSTALL_EVENT: EventDetail(161 EVENT_TYPES.NODE_INSTALL_EVENT: EventDetail(
155 description="Node installation",162 description="Node installation",
156 level=DEBUG,163 level=DEBUG,
157 ),164 ),
165 EVENT_TYPES.NODE_INSTALL_EVENT_FAILED: EventDetail(
166 description="Node installation failure",
167 level=ERROR,
168 ),
158 EVENT_TYPES.REQUEST_NODE_START_COMMISSIONING: EventDetail(169 EVENT_TYPES.REQUEST_NODE_START_COMMISSIONING: EventDetail(
159 description="User starting node commissioning",170 description="User starting node commissioning",
160 level=INFO,171 level=INFO,
@@ -187,6 +198,10 @@
187 description="User marking node failed",198 description="User marking node failed",
188 level=INFO,199 level=INFO,
189 ),200 ),
201 EVENT_TYPES.REQUEST_NODE_MARK_FAILED_SYSTEM: EventDetail(
202 description="Marking node failed",
203 level=ERROR,
204 ),
190 EVENT_TYPES.REQUEST_NODE_MARK_BROKEN: EventDetail(205 EVENT_TYPES.REQUEST_NODE_MARK_BROKEN: EventDetail(
191 description="User marking node broken",206 description="User marking node broken",
192 level=INFO,207 level=INFO,