Add status_message to objects and notifications

This patch is part of the skipped action blueprint. It adds the
`status_message` field to the Audit, ActionPlan and Action objects and
all related notifications.

It bumps the versions of all the affected objects and notifications and
update the tests to include the new fields.

Change-Id: I3b9467e7e37188e647379cd9c4cbbda8ed75383f
Signed-off-by: Alfredo Moralejo <amoralej@redhat.com>
This commit is contained in:
Alfredo Moralejo
2025-08-05 15:48:22 +02:00
parent 84742be8c2
commit 5048a6e3ba
42 changed files with 336 additions and 169 deletions

View File

@@ -14,6 +14,7 @@
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"updated_at": null, "updated_at": null,
"state": "CANCELLED", "state": "CANCELLED",
"status_message": null,
"action_plan": { "action_plan": {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.0", "watcher_object.version": "1.0",
@@ -24,6 +25,7 @@
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"updated_at": null, "updated_at": null,
"state": "CANCELLING", "state": "CANCELLING",
"status_message": null,
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d", "audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3", "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
"deleted_at": null "deleted_at": null

View File

@@ -24,6 +24,7 @@
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"updated_at": null, "updated_at": null,
"state": "FAILED", "state": "FAILED",
"status_message": null,
"action_plan": { "action_plan": {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.0", "watcher_object.version": "1.0",
@@ -34,6 +35,7 @@
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"updated_at": null, "updated_at": null,
"state": "CANCELLING", "state": "CANCELLING",
"status_message": null,
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d", "audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3", "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
"deleted_at": null "deleted_at": null

View File

@@ -14,6 +14,7 @@
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"updated_at": null, "updated_at": null,
"state": "CANCELLING", "state": "CANCELLING",
"status_message": null,
"action_plan": { "action_plan": {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.0", "watcher_object.version": "1.0",
@@ -24,6 +25,7 @@
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"updated_at": null, "updated_at": null,
"state": "CANCELLING", "state": "CANCELLING",
"status_message": null,
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d", "audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3", "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
"deleted_at": null "deleted_at": null

View File

@@ -13,6 +13,7 @@
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"updated_at": null, "updated_at": null,
"state": "PENDING", "state": "PENDING",
"status_message": null,
"action_plan": { "action_plan": {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.0", "watcher_object.version": "1.0",
@@ -23,6 +24,7 @@
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"updated_at": null, "updated_at": null,
"state": "ONGOING", "state": "ONGOING",
"status_message": null,
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d", "audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3", "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
"deleted_at": null "deleted_at": null

View File

@@ -13,6 +13,7 @@
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"updated_at": null, "updated_at": null,
"state": "DELETED", "state": "DELETED",
"status_message": null,
"action_plan": { "action_plan": {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.0", "watcher_object.version": "1.0",
@@ -23,6 +24,7 @@
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"updated_at": null, "updated_at": null,
"state": "ONGOING", "state": "ONGOING",
"status_message": null,
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d", "audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3", "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
"deleted_at": null "deleted_at": null

View File

@@ -14,6 +14,7 @@
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"updated_at": null, "updated_at": null,
"state": "SUCCEEDED", "state": "SUCCEEDED",
"status_message": null,
"action_plan": { "action_plan": {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.0", "watcher_object.version": "1.0",
@@ -24,6 +25,7 @@
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"updated_at": null, "updated_at": null,
"state": "ONGOING", "state": "ONGOING",
"status_message": null,
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d", "audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3", "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
"deleted_at": null "deleted_at": null

View File

@@ -24,6 +24,7 @@
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"updated_at": null, "updated_at": null,
"state": "FAILED", "state": "FAILED",
"status_message": "Action execution failed",
"action_plan": { "action_plan": {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.0", "watcher_object.version": "1.0",
@@ -34,6 +35,7 @@
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"updated_at": null, "updated_at": null,
"state": "ONGOING", "state": "ONGOING",
"status_message": null,
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d", "audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3", "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
"deleted_at": null "deleted_at": null

View File

@@ -14,6 +14,7 @@
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"updated_at": null, "updated_at": null,
"state": "ONGOING", "state": "ONGOING",
"status_message": null,
"action_plan": { "action_plan": {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.0", "watcher_object.version": "1.0",
@@ -24,6 +25,7 @@
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"updated_at": null, "updated_at": null,
"state": "ONGOING", "state": "ONGOING",
"status_message": null,
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d", "audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3", "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
"deleted_at": null "deleted_at": null

View File

@@ -18,10 +18,12 @@
"watcher_object.name": "ActionStateUpdatePayload", "watcher_object.name": "ActionStateUpdatePayload",
"watcher_object.data": { "watcher_object.data": {
"old_state": "PENDING", "old_state": "PENDING",
"state": "ONGOING" "state": "ONGOING",
"status_message": null
} }
}, },
"state": "ONGOING", "state": "ONGOING",
"status_message": null,
"action_plan": { "action_plan": {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.0", "watcher_object.version": "1.0",
@@ -32,6 +34,7 @@
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"updated_at": null, "updated_at": null,
"state": "ONGOING", "state": "ONGOING",
"status_message": null,
"audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d", "audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3", "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
"deleted_at": null "deleted_at": null

View File

@@ -21,6 +21,7 @@
"scope": [], "scope": [],
"audit_type": "ONESHOT", "audit_type": "ONESHOT",
"state": "SUCCEEDED", "state": "SUCCEEDED",
"status_message": null,
"parameters": {}, "parameters": {},
"interval": null, "interval": null,
"updated_at": null "updated_at": null
@@ -29,6 +30,7 @@
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061", "uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
"fault": null, "fault": null,
"state": "CANCELLED", "state": "CANCELLED",
"status_message": null,
"global_efficacy": [], "global_efficacy": [],
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3", "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
"strategy": { "strategy": {

View File

@@ -52,13 +52,15 @@
"scope": [], "scope": [],
"updated_at": null, "updated_at": null,
"audit_type": "ONESHOT", "audit_type": "ONESHOT",
"status_message": null,
"interval": null, "interval": null,
"deleted_at": null, "deleted_at": null,
"state": "SUCCEEDED" "state": "SUCCEEDED"
} }
}, },
"global_efficacy": [], "global_efficacy": [],
"state": "CANCELLING" "state": "CANCELLING",
"status_message": null
} }
}, },
"timestamp": "2016-10-18 09:52:05.219414" "timestamp": "2016-10-18 09:52:05.219414"

View File

@@ -21,6 +21,7 @@
"scope": [], "scope": [],
"audit_type": "ONESHOT", "audit_type": "ONESHOT",
"state": "SUCCEEDED", "state": "SUCCEEDED",
"status_message": null,
"parameters": {}, "parameters": {},
"interval": null, "interval": null,
"updated_at": null "updated_at": null
@@ -29,6 +30,7 @@
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061", "uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
"fault": null, "fault": null,
"state": "CANCELLING", "state": "CANCELLING",
"status_message": null,
"global_efficacy": [], "global_efficacy": [],
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3", "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
"strategy": { "strategy": {

View File

@@ -33,6 +33,7 @@
"interval": null, "interval": null,
"deleted_at": null, "deleted_at": null,
"state": "PENDING", "state": "PENDING",
"status_message": null,
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"updated_at": null "updated_at": null
}, },
@@ -43,6 +44,7 @@
"global_efficacy": {}, "global_efficacy": {},
"deleted_at": null, "deleted_at": null,
"state": "RECOMMENDED", "state": "RECOMMENDED",
"status_message": null,
"updated_at": null "updated_at": null
}, },
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",

View File

@@ -18,6 +18,7 @@
"updated_at": null, "updated_at": null,
"deleted_at": null, "deleted_at": null,
"state": "PENDING", "state": "PENDING",
"status_message": null,
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"parameters": {} "parameters": {}
}, },
@@ -43,7 +44,8 @@
"watcher_object.name": "StrategyPayload", "watcher_object.name": "StrategyPayload",
"watcher_object.namespace": "watcher" "watcher_object.namespace": "watcher"
}, },
"state": "DELETED" "state": "DELETED",
"status_message": null
}, },
"watcher_object.version": "1.0", "watcher_object.version": "1.0",
"watcher_object.name": "ActionPlanDeletePayload", "watcher_object.name": "ActionPlanDeletePayload",

View File

@@ -22,6 +22,7 @@
"scope": [], "scope": [],
"audit_type": "ONESHOT", "audit_type": "ONESHOT",
"state": "SUCCEEDED", "state": "SUCCEEDED",
"status_message": null,
"parameters": {}, "parameters": {},
"interval": null, "interval": null,
"updated_at": null "updated_at": null
@@ -30,6 +31,7 @@
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061", "uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
"fault": null, "fault": null,
"state": "ONGOING", "state": "ONGOING",
"status_message": null,
"global_efficacy": [], "global_efficacy": [],
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3", "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
"strategy": { "strategy": {

View File

@@ -55,11 +55,13 @@
"audit_type": "ONESHOT", "audit_type": "ONESHOT",
"interval": null, "interval": null,
"deleted_at": null, "deleted_at": null,
"state": "PENDING" "state": "PENDING",
"status_message": null
} }
}, },
"global_efficacy": [], "global_efficacy": [],
"state": "ONGOING" "state": "ONGOING",
"status_message": null
} }
}, },
"timestamp": "2016-10-18 09:52:05.219414" "timestamp": "2016-10-18 09:52:05.219414"

View File

@@ -22,6 +22,7 @@
"scope": [], "scope": [],
"audit_type": "ONESHOT", "audit_type": "ONESHOT",
"state": "PENDING", "state": "PENDING",
"status_message": null,
"parameters": {}, "parameters": {},
"interval": null, "interval": null,
"updated_at": null "updated_at": null
@@ -30,6 +31,7 @@
"uuid": "76be87bd-3422-43f9-93a0-e85a577e3061", "uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
"fault": null, "fault": null,
"state": "ONGOING", "state": "ONGOING",
"status_message": null,
"global_efficacy": [], "global_efficacy": [],
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3", "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
"strategy": { "strategy": {

View File

@@ -16,6 +16,7 @@
"interval": null, "interval": null,
"updated_at": null, "updated_at": null,
"state": "PENDING", "state": "PENDING",
"status_message": null,
"deleted_at": null, "deleted_at": null,
"parameters": {} "parameters": {}
}, },
@@ -35,6 +36,7 @@
"watcher_object.name": "ActionPlanStateUpdatePayload" "watcher_object.name": "ActionPlanStateUpdatePayload"
}, },
"state": "ONGOING", "state": "ONGOING",
"status_message": null,
"deleted_at": null, "deleted_at": null,
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3", "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
"strategy": { "strategy": {

View File

@@ -9,6 +9,7 @@
"para1": 3.2 "para1": 3.2
}, },
"state": "PENDING", "state": "PENDING",
"status_message": null,
"updated_at": null, "updated_at": null,
"deleted_at": null, "deleted_at": null,
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a", "goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",

View File

@@ -9,6 +9,7 @@
"para1": 3.2 "para1": 3.2
}, },
"state": "DELETED", "state": "DELETED",
"status_message": null,
"updated_at": null, "updated_at": null,
"deleted_at": null, "deleted_at": null,
"goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a", "goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",

View File

@@ -9,6 +9,7 @@
"para1": 3.2 "para1": 3.2
}, },
"state": "ONGOING", "state": "ONGOING",
"status_message": null,
"updated_at": null, "updated_at": null,
"deleted_at": null, "deleted_at": null,
"fault": null, "fault": null,

View File

@@ -9,6 +9,7 @@
"para1": 3.2 "para1": 3.2
}, },
"state": "ONGOING", "state": "ONGOING",
"status_message": null,
"updated_at": null, "updated_at": null,
"deleted_at": null, "deleted_at": null,
"fault": { "fault": {

View File

@@ -9,6 +9,7 @@
"para1": 3.2 "para1": 3.2
}, },
"state": "ONGOING", "state": "ONGOING",
"status_message": null,
"updated_at": null, "updated_at": null,
"deleted_at": null, "deleted_at": null,
"fault": null, "fault": null,

View File

@@ -9,6 +9,7 @@
"para1": 3.2 "para1": 3.2
}, },
"state": "ONGOING", "state": "ONGOING",
"status_message": null,
"updated_at": null, "updated_at": null,
"deleted_at": null, "deleted_at": null,
"fault": null, "fault": null,

View File

@@ -9,6 +9,7 @@
"para1": 3.2 "para1": 3.2
}, },
"state": "ONGOING", "state": "ONGOING",
"status_message": null,
"updated_at": null, "updated_at": null,
"deleted_at": null, "deleted_at": null,
"fault": { "fault": {

View File

@@ -9,6 +9,7 @@
"para1": 3.2 "para1": 3.2
}, },
"state": "ONGOING", "state": "ONGOING",
"status_message": null,
"updated_at": null, "updated_at": null,
"deleted_at": null, "deleted_at": null,
"fault": null, "fault": null,

View File

@@ -70,6 +70,7 @@
"interval": null, "interval": null,
"updated_at": null, "updated_at": null,
"state": "ONGOING", "state": "ONGOING",
"status_message": null,
"audit_type": "ONESHOT" "audit_type": "ONESHOT"
}, },
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",

View File

@@ -43,10 +43,13 @@ class ActionPayload(notificationbase.NotificationPayloadBase):
'created_at': ('action', 'created_at'), 'created_at': ('action', 'created_at'),
'updated_at': ('action', 'updated_at'), 'updated_at': ('action', 'updated_at'),
'deleted_at': ('action', 'deleted_at'), 'deleted_at': ('action', 'deleted_at'),
'status_message': ('action', 'status_message'),
} }
# Version 1.0: Initial version # Version 1.0: Initial version
VERSION = '1.0' # Version 1.1: Added 'status_message' field
VERSION = '1.1'
fields = { fields = {
'uuid': wfields.UUIDField(), 'uuid': wfields.UUIDField(),
@@ -56,6 +59,7 @@ class ActionPayload(notificationbase.NotificationPayloadBase):
'parents': wfields.ListOfUUIDsField(nullable=False, default=[]), 'parents': wfields.ListOfUUIDsField(nullable=False, default=[]),
'action_plan_uuid': wfields.UUIDField(), 'action_plan_uuid': wfields.UUIDField(),
'action_plan': wfields.ObjectField('TerseActionPlanPayload'), 'action_plan': wfields.ObjectField('TerseActionPlanPayload'),
'status_message': wfields.StringField(nullable=True),
'created_at': wfields.DateTimeField(nullable=True), 'created_at': wfields.DateTimeField(nullable=True),
'updated_at': wfields.DateTimeField(nullable=True), 'updated_at': wfields.DateTimeField(nullable=True),
@@ -70,18 +74,21 @@ class ActionPayload(notificationbase.NotificationPayloadBase):
@base.WatcherObjectRegistry.register_notification @base.WatcherObjectRegistry.register_notification
class ActionStateUpdatePayload(notificationbase.NotificationPayloadBase): class ActionStateUpdatePayload(notificationbase.NotificationPayloadBase):
# Version 1.0: Initial version # Version 1.0: Initial version
VERSION = '1.0' # Version 1.1: Added 'status_message' field
VERSION = '1.1'
fields = { fields = {
'old_state': wfields.StringField(nullable=True), 'old_state': wfields.StringField(nullable=True),
'state': wfields.StringField(nullable=True), 'state': wfields.StringField(nullable=True),
'status_message': wfields.StringField(nullable=True),
} }
@base.WatcherObjectRegistry.register_notification @base.WatcherObjectRegistry.register_notification
class ActionCreatePayload(ActionPayload): class ActionCreatePayload(ActionPayload):
# Version 1.0: Initial version # Version 1.0: Initial version
VERSION = '1.0' # Version 1.1: Added 'status_message' field
VERSION = '1.1'
fields = {} fields = {}
def __init__(self, action, action_plan): def __init__(self, action, action_plan):
@@ -93,7 +100,8 @@ class ActionCreatePayload(ActionPayload):
@base.WatcherObjectRegistry.register_notification @base.WatcherObjectRegistry.register_notification
class ActionUpdatePayload(ActionPayload): class ActionUpdatePayload(ActionPayload):
# Version 1.0: Initial version # Version 1.0: Initial version
VERSION = '1.0' # Version 1.1: Added 'status_message' field
VERSION = '1.1'
fields = { fields = {
'state_update': wfields.ObjectField('ActionStateUpdatePayload'), 'state_update': wfields.ObjectField('ActionStateUpdatePayload'),
} }
@@ -108,7 +116,8 @@ class ActionUpdatePayload(ActionPayload):
@base.WatcherObjectRegistry.register_notification @base.WatcherObjectRegistry.register_notification
class ActionExecutionPayload(ActionPayload): class ActionExecutionPayload(ActionPayload):
# Version 1.0: Initial version # Version 1.0: Initial version
VERSION = '1.0' # Version 1.1: Added 'status_message' field
VERSION = '1.1'
fields = { fields = {
'fault': wfields.ObjectField('ExceptionPayload', nullable=True), 'fault': wfields.ObjectField('ExceptionPayload', nullable=True),
} }
@@ -123,7 +132,8 @@ class ActionExecutionPayload(ActionPayload):
@base.WatcherObjectRegistry.register_notification @base.WatcherObjectRegistry.register_notification
class ActionCancelPayload(ActionPayload): class ActionCancelPayload(ActionPayload):
# Version 1.0: Initial version # Version 1.0: Initial version
VERSION = '1.0' # Version 1.1: Added 'status_message' field
VERSION = '1.1'
fields = { fields = {
'fault': wfields.ObjectField('ExceptionPayload', nullable=True), 'fault': wfields.ObjectField('ExceptionPayload', nullable=True),
} }
@@ -138,7 +148,8 @@ class ActionCancelPayload(ActionPayload):
@base.WatcherObjectRegistry.register_notification @base.WatcherObjectRegistry.register_notification
class ActionDeletePayload(ActionPayload): class ActionDeletePayload(ActionPayload):
# Version 1.0: Initial version # Version 1.0: Initial version
VERSION = '1.0' # Version 1.1: Added 'status_message' field
VERSION = '1.1'
fields = {} fields = {}
def __init__(self, action, action_plan): def __init__(self, action, action_plan):
@@ -257,7 +268,11 @@ def send_update(context, action, service='infra-optim',
state_update = ActionStateUpdatePayload( state_update = ActionStateUpdatePayload(
old_state=old_state, old_state=old_state,
state=action.state if old_state else None) state=action.state if old_state else None,
status_message=(
action.status_message if old_state and
action.status_message else None)
)
versioned_payload = ActionUpdatePayload( versioned_payload = ActionUpdatePayload(
action=action, action=action,

View File

@@ -38,6 +38,7 @@ class TerseActionPlanPayload(notificationbase.NotificationPayloadBase):
'state': ('action_plan', 'state'), 'state': ('action_plan', 'state'),
'global_efficacy': ('action_plan', 'global_efficacy'), 'global_efficacy': ('action_plan', 'global_efficacy'),
'status_message': ('action_plan', 'status_message'),
'created_at': ('action_plan', 'created_at'), 'created_at': ('action_plan', 'created_at'),
'updated_at': ('action_plan', 'updated_at'), 'updated_at': ('action_plan', 'updated_at'),
@@ -46,7 +47,8 @@ class TerseActionPlanPayload(notificationbase.NotificationPayloadBase):
# Version 1.0: Initial version # Version 1.0: Initial version
# Version 1.1: Changed 'global_efficacy' type Dictionary to List # Version 1.1: Changed 'global_efficacy' type Dictionary to List
VERSION = '1.1' # Version 1.2: Added 'status_message' field
VERSION = '1.2'
fields = { fields = {
'uuid': wfields.UUIDField(), 'uuid': wfields.UUIDField(),
@@ -54,6 +56,7 @@ class TerseActionPlanPayload(notificationbase.NotificationPayloadBase):
'global_efficacy': wfields.FlexibleListOfDictField(nullable=True), 'global_efficacy': wfields.FlexibleListOfDictField(nullable=True),
'audit_uuid': wfields.UUIDField(), 'audit_uuid': wfields.UUIDField(),
'strategy_uuid': wfields.UUIDField(nullable=True), 'strategy_uuid': wfields.UUIDField(nullable=True),
'status_message': wfields.StringField(nullable=True),
'created_at': wfields.DateTimeField(nullable=True), 'created_at': wfields.DateTimeField(nullable=True),
'updated_at': wfields.DateTimeField(nullable=True), 'updated_at': wfields.DateTimeField(nullable=True),
@@ -74,6 +77,7 @@ class ActionPlanPayload(TerseActionPlanPayload):
'state': ('action_plan', 'state'), 'state': ('action_plan', 'state'),
'global_efficacy': ('action_plan', 'global_efficacy'), 'global_efficacy': ('action_plan', 'global_efficacy'),
'status_message': ('action_plan', 'status_message'),
'created_at': ('action_plan', 'created_at'), 'created_at': ('action_plan', 'created_at'),
'updated_at': ('action_plan', 'updated_at'), 'updated_at': ('action_plan', 'updated_at'),
@@ -82,7 +86,8 @@ class ActionPlanPayload(TerseActionPlanPayload):
# Version 1.0: Initial version # Version 1.0: Initial version
# Vesrsion 1.1: changed global_efficacy type # Vesrsion 1.1: changed global_efficacy type
VERSION = '1.1' # Version 1.2 : Added 'status_message' field
VERSION = '1.2'
fields = { fields = {
'audit': wfields.ObjectField('TerseAuditPayload'), 'audit': wfields.ObjectField('TerseAuditPayload'),
@@ -103,11 +108,13 @@ class ActionPlanPayload(TerseActionPlanPayload):
@base.WatcherObjectRegistry.register_notification @base.WatcherObjectRegistry.register_notification
class ActionPlanStateUpdatePayload(notificationbase.NotificationPayloadBase): class ActionPlanStateUpdatePayload(notificationbase.NotificationPayloadBase):
# Version 1.0: Initial version # Version 1.0: Initial version
VERSION = '1.0' # Version 1.1: Added 'status_message' field
VERSION = '1.1'
fields = { fields = {
'old_state': wfields.StringField(nullable=True), 'old_state': wfields.StringField(nullable=True),
'state': wfields.StringField(nullable=True), 'state': wfields.StringField(nullable=True),
'status_message': wfields.StringField(nullable=True),
} }
@@ -115,7 +122,8 @@ class ActionPlanStateUpdatePayload(notificationbase.NotificationPayloadBase):
class ActionPlanCreatePayload(ActionPlanPayload): class ActionPlanCreatePayload(ActionPlanPayload):
# Version 1.0: Initial version # Version 1.0: Initial version
# Version 1.1: Changed global_efficacy_type # Version 1.1: Changed global_efficacy_type
VERSION = '1.1' # Version 1.2: Added 'status_message' field
VERSION = '1.2'
fields = {} fields = {}
def __init__(self, action_plan, audit, strategy): def __init__(self, action_plan, audit, strategy):
@@ -129,7 +137,8 @@ class ActionPlanCreatePayload(ActionPlanPayload):
class ActionPlanUpdatePayload(ActionPlanPayload): class ActionPlanUpdatePayload(ActionPlanPayload):
# Version 1.0: Initial version # Version 1.0: Initial version
# Version 1.1: Changed global_efficacy_type # Version 1.1: Changed global_efficacy_type
VERSION = '1.1' # Version 1.2: Added 'status_message' field
VERSION = '1.2'
fields = { fields = {
'state_update': wfields.ObjectField('ActionPlanStateUpdatePayload'), 'state_update': wfields.ObjectField('ActionPlanStateUpdatePayload'),
} }
@@ -146,7 +155,8 @@ class ActionPlanUpdatePayload(ActionPlanPayload):
class ActionPlanActionPayload(ActionPlanPayload): class ActionPlanActionPayload(ActionPlanPayload):
# Version 1.0: Initial version # Version 1.0: Initial version
# Version 1.1: Changed global_efficacy_type # Version 1.1: Changed global_efficacy_type
VERSION = '1.1' # Version 1.2: Added 'status_message' field
VERSION = '1.2'
fields = { fields = {
'fault': wfields.ObjectField('ExceptionPayload', nullable=True), 'fault': wfields.ObjectField('ExceptionPayload', nullable=True),
} }
@@ -163,7 +173,8 @@ class ActionPlanActionPayload(ActionPlanPayload):
class ActionPlanDeletePayload(ActionPlanPayload): class ActionPlanDeletePayload(ActionPlanPayload):
# Version 1.0: Initial version # Version 1.0: Initial version
# Version 1.1: Changed global_efficacy_type # Version 1.1: Changed global_efficacy_type
VERSION = '1.1' # Version 1.2: Added 'status_message' field
VERSION = '1.2'
fields = {} fields = {}
def __init__(self, action_plan, audit, strategy): def __init__(self, action_plan, audit, strategy):
@@ -177,7 +188,8 @@ class ActionPlanDeletePayload(ActionPlanPayload):
class ActionPlanCancelPayload(ActionPlanPayload): class ActionPlanCancelPayload(ActionPlanPayload):
# Version 1.0: Initial version # Version 1.0: Initial version
# Version 1.1: Changed global_efficacy_type # Version 1.1: Changed global_efficacy_type
VERSION = '1.1' # Version 1.2: Added 'status_message' field
VERSION = '1.2'
fields = { fields = {
'fault': wfields.ObjectField('ExceptionPayload', nullable=True), 'fault': wfields.ObjectField('ExceptionPayload', nullable=True),
} }
@@ -300,7 +312,11 @@ def send_update(context, action_plan, service='infra-optim',
state_update = ActionPlanStateUpdatePayload( state_update = ActionPlanStateUpdatePayload(
old_state=old_state, old_state=old_state,
state=action_plan.state if old_state else None) state=action_plan.state if old_state else None,
status_message=(
action_plan.status_message if old_state and
action_plan.status_message else None)
)
versioned_payload = ActionPlanUpdatePayload( versioned_payload = ActionPlanUpdatePayload(
action_plan=action_plan, action_plan=action_plan,

View File

@@ -45,6 +45,8 @@ class TerseAuditPayload(notificationbase.NotificationPayloadBase):
'created_at': ('audit', 'created_at'), 'created_at': ('audit', 'created_at'),
'updated_at': ('audit', 'updated_at'), 'updated_at': ('audit', 'updated_at'),
'deleted_at': ('audit', 'deleted_at'), 'deleted_at': ('audit', 'deleted_at'),
'status_message': ('audit', 'status_message'),
} }
# Version 1.0: Initial version # Version 1.0: Initial version
@@ -52,7 +54,8 @@ class TerseAuditPayload(notificationbase.NotificationPayloadBase):
# Added 'next_run_time' DateTime field, # Added 'next_run_time' DateTime field,
# 'interval' type has been changed from Integer to String # 'interval' type has been changed from Integer to String
# Version 1.2: Added 'name' string field # Version 1.2: Added 'name' string field
VERSION = '1.2' # Version 1.3: Added 'status_message' string field
VERSION = '1.3'
fields = { fields = {
'uuid': wfields.UUIDField(), 'uuid': wfields.UUIDField(),
@@ -70,6 +73,8 @@ class TerseAuditPayload(notificationbase.NotificationPayloadBase):
'created_at': wfields.DateTimeField(nullable=True), 'created_at': wfields.DateTimeField(nullable=True),
'updated_at': wfields.DateTimeField(nullable=True), 'updated_at': wfields.DateTimeField(nullable=True),
'deleted_at': wfields.DateTimeField(nullable=True), 'deleted_at': wfields.DateTimeField(nullable=True),
'status_message': wfields.StringField(nullable=True),
} }
def __init__(self, audit, goal_uuid, strategy_uuid=None, **kwargs): def __init__(self, audit, goal_uuid, strategy_uuid=None, **kwargs):
@@ -94,13 +99,16 @@ class AuditPayload(TerseAuditPayload):
'created_at': ('audit', 'created_at'), 'created_at': ('audit', 'created_at'),
'updated_at': ('audit', 'updated_at'), 'updated_at': ('audit', 'updated_at'),
'deleted_at': ('audit', 'deleted_at'), 'deleted_at': ('audit', 'deleted_at'),
'status_message': ('audit', 'status_message'),
} }
# Version 1.0: Initial version # Version 1.0: Initial version
# Version 1.1: Added 'auto_trigger' field, # Version 1.1: Added 'auto_trigger' field,
# Added 'next_run_time' field # Added 'next_run_time' field
# Version 1.2: Added 'name' string field # Version 1.2: Added 'name' string field
VERSION = '1.2' # Version 1.3: Added 'status_message' string field
VERSION = '1.3'
fields = { fields = {
'goal': wfields.ObjectField('GoalPayload'), 'goal': wfields.ObjectField('GoalPayload'),
@@ -122,11 +130,13 @@ class AuditPayload(TerseAuditPayload):
@base.WatcherObjectRegistry.register_notification @base.WatcherObjectRegistry.register_notification
class AuditStateUpdatePayload(notificationbase.NotificationPayloadBase): class AuditStateUpdatePayload(notificationbase.NotificationPayloadBase):
# Version 1.0: Initial version # Version 1.0: Initial version
VERSION = '1.0' # Version 1.1: Added 'status_message' string field
VERSION = '1.1'
fields = { fields = {
'old_state': wfields.StringField(nullable=True), 'old_state': wfields.StringField(nullable=True),
'state': wfields.StringField(nullable=True), 'state': wfields.StringField(nullable=True),
'status_message': wfields.StringField(nullable=True),
} }
@@ -135,7 +145,8 @@ class AuditCreatePayload(AuditPayload):
# Version 1.0: Initial version # Version 1.0: Initial version
# Version 1.1: Added 'auto_trigger' field, # Version 1.1: Added 'auto_trigger' field,
# Added 'next_run_time' field # Added 'next_run_time' field
VERSION = '1.1' # Version 1.2: Added 'status_message' string field
VERSION = '1.2'
fields = {} fields = {}
def __init__(self, audit, goal, strategy): def __init__(self, audit, goal, strategy):
@@ -151,7 +162,8 @@ class AuditUpdatePayload(AuditPayload):
# Version 1.0: Initial version # Version 1.0: Initial version
# Version 1.1: Added 'auto_trigger' field, # Version 1.1: Added 'auto_trigger' field,
# Added 'next_run_time' field # Added 'next_run_time' field
VERSION = '1.1' # Version 1.2: Added 'status_message' string field
VERSION = '1.2'
fields = { fields = {
'state_update': wfields.ObjectField('AuditStateUpdatePayload'), 'state_update': wfields.ObjectField('AuditStateUpdatePayload'),
} }
@@ -170,7 +182,8 @@ class AuditActionPayload(AuditPayload):
# Version 1.0: Initial version # Version 1.0: Initial version
# Version 1.1: Added 'auto_trigger' field, # Version 1.1: Added 'auto_trigger' field,
# Added 'next_run_time' field # Added 'next_run_time' field
VERSION = '1.1' # Version 1.2: Added 'status_message' string field
VERSION = '1.2'
fields = { fields = {
'fault': wfields.ObjectField('ExceptionPayload', nullable=True), 'fault': wfields.ObjectField('ExceptionPayload', nullable=True),
} }
@@ -189,7 +202,8 @@ class AuditDeletePayload(AuditPayload):
# Version 1.0: Initial version # Version 1.0: Initial version
# Version 1.1: Added 'auto_trigger' field, # Version 1.1: Added 'auto_trigger' field,
# Added 'next_run_time' field # Added 'next_run_time' field
VERSION = '1.1' # Version 1.2: Added 'status_message' string field
VERSION = '1.2'
fields = {} fields = {}
def __init__(self, audit, goal, strategy): def __init__(self, audit, goal, strategy):
@@ -296,7 +310,10 @@ def send_update(context, audit, service='infra-optim',
state_update = AuditStateUpdatePayload( state_update = AuditStateUpdatePayload(
old_state=old_state, old_state=old_state,
state=audit.state if old_state else None) state=audit.state if old_state else None,
status_message=(
audit.status_message if old_state and
audit.status_message else None))
versioned_payload = AuditUpdatePayload( versioned_payload = AuditUpdatePayload(
audit=audit, audit=audit,

View File

@@ -40,7 +40,8 @@ class Action(base.WatcherPersistentObject, base.WatcherObject,
# Version 1.0: Initial version # Version 1.0: Initial version
# Version 1.1: Added 'action_plan' object field # Version 1.1: Added 'action_plan' object field
# Version 2.0: Removed 'next' object field, Added 'parents' object field # Version 2.0: Removed 'next' object field, Added 'parents' object field
VERSION = '2.0' # Version 2.1: Added 'status_message' object field
VERSION = '2.1'
dbapi = db_api.get_instance() dbapi = db_api.get_instance()
@@ -52,6 +53,7 @@ class Action(base.WatcherPersistentObject, base.WatcherObject,
'input_parameters': wfields.DictField(nullable=True), 'input_parameters': wfields.DictField(nullable=True),
'state': wfields.StringField(nullable=True), 'state': wfields.StringField(nullable=True),
'parents': wfields.ListOfStringsField(nullable=True), 'parents': wfields.ListOfStringsField(nullable=True),
'status_message': wfields.StringField(nullable=True),
'action_plan': wfields.ObjectField('ActionPlan', nullable=True), 'action_plan': wfields.ObjectField('ActionPlan', nullable=True),
} }

View File

@@ -109,7 +109,8 @@ class ActionPlan(base.WatcherPersistentObject, base.WatcherObject,
# Version 2.0: Removed 'first_action_id' object field # Version 2.0: Removed 'first_action_id' object field
# Version 2.1: Changed global_efficacy type # Version 2.1: Changed global_efficacy type
# Version 2.2: Added 'hostname' field # Version 2.2: Added 'hostname' field
VERSION = '2.2' # Version 2.3: Added 'status_message' field
VERSION = '2.3'
dbapi = db_api.get_instance() dbapi = db_api.get_instance()
@@ -124,6 +125,7 @@ class ActionPlan(base.WatcherPersistentObject, base.WatcherObject,
'audit': wfields.ObjectField('Audit', nullable=True), 'audit': wfields.ObjectField('Audit', nullable=True),
'strategy': wfields.ObjectField('Strategy', nullable=True), 'strategy': wfields.ObjectField('Strategy', nullable=True),
'status_message': wfields.StringField(nullable=True),
} }
object_fields = { object_fields = {

View File

@@ -91,7 +91,8 @@ class Audit(base.WatcherPersistentObject, base.WatcherObject,
# Version 1.5: Added 'hostname' field # Version 1.5: Added 'hostname' field
# Version 1.6: Added 'start_time' and 'end_time' DateTime fields # Version 1.6: Added 'start_time' and 'end_time' DateTime fields
# Version 1.7: Added 'force' boolean field # Version 1.7: Added 'force' boolean field
VERSION = '1.7' # Version 1.8: Added 'status_message' string field
VERSION = '1.8'
dbapi = db_api.get_instance() dbapi = db_api.get_instance()
@@ -116,6 +117,8 @@ class Audit(base.WatcherPersistentObject, base.WatcherObject,
'goal': wfields.ObjectField('Goal', nullable=True), 'goal': wfields.ObjectField('Goal', nullable=True),
'strategy': wfields.ObjectField('Strategy', nullable=True), 'strategy': wfields.ObjectField('Strategy', nullable=True),
'status_message': wfields.StringField(nullable=True),
} }
object_fields = { object_fields = {

View File

@@ -59,7 +59,7 @@ def post_get_test_audit_with_predefined_strategy(**kw):
audit = api_utils.audit_post_data(**kw) audit = api_utils.audit_post_data(**kw)
audit_template = db_utils.get_test_audit_template( audit_template = db_utils.get_test_audit_template(
strategy_id=strategy['id']) strategy_id=strategy['id'])
del_keys = ['goal_id', 'strategy_id'] del_keys = ['goal_id', 'strategy_id', 'status_message']
add_keys = {'audit_template_uuid': audit_template['uuid'], add_keys = {'audit_template_uuid': audit_template['uuid'],
} }
for k in del_keys: for k in del_keys:
@@ -500,7 +500,8 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
state=objects.audit.State.PENDING, state=objects.audit.State.PENDING,
params_to_exclude=['uuid', 'state', 'interval', 'scope', params_to_exclude=['uuid', 'state', 'interval', 'scope',
'next_run_time', 'hostname', 'goal']) 'next_run_time', 'hostname', 'goal',
'status_message'])
response = self.post_json('/audits', audit_dict) response = self.post_json('/audits', audit_dict)
self.assertEqual('application/json', response.content_type) self.assertEqual('application/json', response.content_type)
@@ -541,7 +542,7 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
state=objects.audit.State.PENDING, state=objects.audit.State.PENDING,
params_to_exclude=['uuid', 'state', 'interval', 'scope', params_to_exclude=['uuid', 'state', 'interval', 'scope',
'next_run_time', 'hostname']) 'next_run_time', 'hostname', 'status_message'])
response = self.post_json('/audits', audit_dict, expect_errors=True) response = self.post_json('/audits', audit_dict, expect_errors=True)
self.assertEqual(HTTPStatus.BAD_REQUEST, response.status_int) self.assertEqual(HTTPStatus.BAD_REQUEST, response.status_int)
@@ -555,7 +556,7 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
params_to_exclude=['uuid', 'state', 'interval', 'scope', params_to_exclude=['uuid', 'state', 'interval', 'scope',
'next_run_time', 'hostname', 'next_run_time', 'hostname',
'audit_template_uuid']) 'audit_template_uuid', 'status_message'])
response = self.post_json('/audits', audit_dict) response = self.post_json('/audits', audit_dict)
self.assertEqual('application/json', response.content_type) self.assertEqual('application/json', response.content_type)
@@ -571,7 +572,8 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
params_to_exclude=['uuid', 'state', 'interval', 'scope', params_to_exclude=['uuid', 'state', 'interval', 'scope',
'next_run_time', 'hostname', 'next_run_time', 'hostname',
'audit_template_uuid', 'strategy']) 'audit_template_uuid', 'strategy',
'status_message'])
response = self.post_json('/audits', audit_dict) response = self.post_json('/audits', audit_dict)
self.assertEqual('application/json', response.content_type) self.assertEqual('application/json', response.content_type)
@@ -587,7 +589,7 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
params_to_exclude=['uuid', 'state', 'interval', 'scope', params_to_exclude=['uuid', 'state', 'interval', 'scope',
'next_run_time', 'hostname', 'next_run_time', 'hostname',
'audit_template_uuid'], 'audit_template_uuid', 'status_message'],
use_named_goal=True) use_named_goal=True)
response = self.post_json('/audits', audit_dict) response = self.post_json('/audits', audit_dict)
@@ -604,7 +606,8 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
params_to_exclude=['uuid', 'state', 'interval', 'scope', params_to_exclude=['uuid', 'state', 'interval', 'scope',
'next_run_time', 'hostname', 'goal']) 'next_run_time', 'hostname', 'goal',
'status_message'])
# Make the audit template UUID some garbage value # Make the audit template UUID some garbage value
audit_dict['audit_template_uuid'] = ( audit_dict['audit_template_uuid'] = (
'01234567-8910-1112-1314-151617181920') '01234567-8910-1112-1314-151617181920')
@@ -624,7 +627,8 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
state=objects.audit.State.PENDING, state=objects.audit.State.PENDING,
params_to_exclude=['uuid', 'interval', 'scope', params_to_exclude=['uuid', 'interval', 'scope',
'next_run_time', 'hostname', 'goal']) 'next_run_time', 'hostname', 'goal',
'status_message'])
state = audit_dict['state'] state = audit_dict['state']
del audit_dict['state'] del audit_dict['state']
with mock.patch.object(self.dbapi, 'create_audit', with mock.patch.object(self.dbapi, 'create_audit',
@@ -641,7 +645,8 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
params_to_exclude=['uuid', 'state', 'interval', 'scope', params_to_exclude=['uuid', 'state', 'interval', 'scope',
'next_run_time', 'hostname', 'goal']) 'next_run_time', 'hostname', 'goal',
'status_message'])
response = self.post_json('/audits', audit_dict) response = self.post_json('/audits', audit_dict)
self.assertEqual('application/json', response.content_type) self.assertEqual('application/json', response.content_type)
@@ -656,7 +661,8 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
params_to_exclude=['uuid', 'state', 'scope', params_to_exclude=['uuid', 'state', 'scope',
'next_run_time', 'hostname', 'goal']) 'next_run_time', 'hostname', 'goal',
'status_message'])
audit_dict['audit_type'] = objects.audit.AuditType.CONTINUOUS.value audit_dict['audit_type'] = objects.audit.AuditType.CONTINUOUS.value
audit_dict['interval'] = '1200' audit_dict['interval'] = '1200'
@@ -675,7 +681,8 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
params_to_exclude=['uuid', 'state', 'scope', params_to_exclude=['uuid', 'state', 'scope',
'next_run_time', 'hostname', 'goal']) 'next_run_time', 'hostname', 'goal',
'status_message'])
audit_dict['audit_type'] = objects.audit.AuditType.CONTINUOUS.value audit_dict['audit_type'] = objects.audit.AuditType.CONTINUOUS.value
audit_dict['interval'] = '* * * * *' audit_dict['interval'] = '* * * * *'
@@ -694,7 +701,8 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
params_to_exclude=['uuid', 'state', 'scope', params_to_exclude=['uuid', 'state', 'scope',
'next_run_time', 'hostname', 'goal']) 'next_run_time', 'hostname', 'goal',
'status_message'])
audit_dict['audit_type'] = objects.audit.AuditType.CONTINUOUS.value audit_dict['audit_type'] = objects.audit.AuditType.CONTINUOUS.value
audit_dict['interval'] = 'zxc' audit_dict['interval'] = 'zxc'
@@ -714,7 +722,8 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
params_to_exclude=['uuid', 'state', 'interval', 'scope', params_to_exclude=['uuid', 'state', 'interval', 'scope',
'next_run_time', 'hostname', 'goal']) 'next_run_time', 'hostname', 'goal',
'status_message'])
audit_dict['audit_type'] = objects.audit.AuditType.CONTINUOUS.value audit_dict['audit_type'] = objects.audit.AuditType.CONTINUOUS.value
response = self.post_json('/audits', audit_dict, expect_errors=True) response = self.post_json('/audits', audit_dict, expect_errors=True)
@@ -731,7 +740,8 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
params_to_exclude=['uuid', 'state', 'scope', params_to_exclude=['uuid', 'state', 'scope',
'next_run_time', 'hostname', 'goal']) 'next_run_time', 'hostname', 'goal',
'status_message'])
audit_dict['audit_type'] = objects.audit.AuditType.ONESHOT.value audit_dict['audit_type'] = objects.audit.AuditType.ONESHOT.value
response = self.post_json('/audits', audit_dict, expect_errors=True) response = self.post_json('/audits', audit_dict, expect_errors=True)
@@ -747,7 +757,8 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
state=objects.audit.State.PENDING, state=objects.audit.State.PENDING,
params_to_exclude=['uuid', 'state', 'interval', 'scope', params_to_exclude=['uuid', 'state', 'interval', 'scope',
'next_run_time', 'hostname', 'goal']) 'next_run_time', 'hostname', 'goal',
'status_message'])
response = self.post_json('/audits', audit_dict) response = self.post_json('/audits', audit_dict)
de_mock.assert_called_once_with(mock.ANY, response.json['uuid']) de_mock.assert_called_once_with(mock.ANY, response.json['uuid'])
@@ -769,7 +780,8 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
parameters={'name': 'Tom'}, parameters={'name': 'Tom'},
params_to_exclude=['uuid', 'state', 'interval', 'scope', params_to_exclude=['uuid', 'state', 'interval', 'scope',
'next_run_time', 'hostname', 'goal']) 'next_run_time', 'hostname', 'goal',
'status_message'])
response = self.post_json('/audits', audit_dict, expect_errors=True) response = self.post_json('/audits', audit_dict, expect_errors=True)
self.assertEqual('application/json', response.content_type) self.assertEqual('application/json', response.content_type)
@@ -815,7 +827,7 @@ class TestPost(api_base.FunctionalTest):
audit_dict['audit_template_uuid'] = audit_template['uuid'] audit_dict['audit_template_uuid'] = audit_template['uuid']
del_keys = ['uuid', 'goal_id', 'strategy_id', 'state', 'interval', del_keys = ['uuid', 'goal_id', 'strategy_id', 'state', 'interval',
'scope', 'next_run_time', 'hostname'] 'scope', 'next_run_time', 'hostname', 'status_message']
for k in del_keys: for k in del_keys:
del audit_dict[k] del audit_dict[k]
@@ -838,7 +850,7 @@ class TestPost(api_base.FunctionalTest):
audit_dict['audit_template_uuid'] = audit_template['uuid'] audit_dict['audit_template_uuid'] = audit_template['uuid']
del_keys = ['uuid', 'goal_id', 'strategy_id', 'state', 'interval', del_keys = ['uuid', 'goal_id', 'strategy_id', 'state', 'interval',
'scope', 'next_run_time', 'hostname'] 'scope', 'next_run_time', 'hostname', 'status_message']
for k in del_keys: for k in del_keys:
del audit_dict[k] del audit_dict[k]
@@ -894,7 +906,8 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
params_to_exclude=['state', 'interval', 'scope', params_to_exclude=['state', 'interval', 'scope',
'next_run_time', 'hostname', 'goal']) 'next_run_time', 'hostname', 'goal',
'status_message'])
normal_name = 'this audit name is just for test' normal_name = 'this audit name is just for test'
# long_name length exceeds 63 characters # long_name length exceeds 63 characters
long_name = normal_name + audit_dict['uuid'] long_name = normal_name + audit_dict['uuid']
@@ -921,7 +934,8 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
params_to_exclude=['uuid', 'state', 'scope', params_to_exclude=['uuid', 'state', 'scope',
'next_run_time', 'hostname', 'goal'] 'next_run_time', 'hostname', 'goal',
'status_message']
) )
audit_dict['audit_type'] = objects.audit.AuditType.CONTINUOUS.value audit_dict['audit_type'] = objects.audit.AuditType.CONTINUOUS.value
audit_dict['interval'] = '1200' audit_dict['interval'] = '1200'
@@ -957,7 +971,8 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
params_to_exclude=['uuid', 'state', 'scope', params_to_exclude=['uuid', 'state', 'scope',
'next_run_time', 'hostname', 'goal'] 'next_run_time', 'hostname', 'goal',
'status_message']
) )
audit_dict['audit_type'] = objects.audit.AuditType.CONTINUOUS.value audit_dict['audit_type'] = objects.audit.AuditType.CONTINUOUS.value
audit_dict['interval'] = '1200' audit_dict['interval'] = '1200'
@@ -982,7 +997,8 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
params_to_exclude=['uuid', 'state', 'interval', 'scope', params_to_exclude=['uuid', 'state', 'interval', 'scope',
'next_run_time', 'hostname', 'goal']) 'next_run_time', 'hostname', 'goal',
'status_message'])
response = self.post_json( response = self.post_json(
'/audits', '/audits',
@@ -998,7 +1014,8 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
params_to_exclude=['uuid', 'state', 'interval', 'scope', params_to_exclude=['uuid', 'state', 'interval', 'scope',
'next_run_time', 'hostname', 'goal']) 'next_run_time', 'hostname', 'goal',
'status_message'])
audit_dict['force'] = True audit_dict['force'] = True
response = self.post_json( response = self.post_json(
@@ -1016,7 +1033,8 @@ class TestPost(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
params_to_exclude=['uuid', 'state', 'interval', 'scope', params_to_exclude=['uuid', 'state', 'interval', 'scope',
'next_run_time', 'hostname', 'goal', 'next_run_time', 'hostname', 'goal',
'audit_template_uuid', 'name']) 'audit_template_uuid', 'name',
'status_message'])
response = self.post_json( response = self.post_json(
'/audits', '/audits',
@@ -1141,7 +1159,8 @@ class TestAuditPolicyEnforcement(api_base.FunctionalTest):
audit_dict = post_get_test_audit( audit_dict = post_get_test_audit(
state=objects.audit.State.PENDING, state=objects.audit.State.PENDING,
params_to_exclude=['uuid', 'state', 'scope', params_to_exclude=['uuid', 'state', 'scope',
'next_run_time', 'hostname', 'goal']) 'next_run_time', 'hostname', 'goal',
'status_message'])
self._common_policy_check( self._common_policy_check(
"audit:create", self.post_json, '/audits', audit_dict, "audit:create", self.post_json, '/audits', audit_dict,
expect_errors=True) expect_errors=True)

View File

@@ -99,8 +99,8 @@ def get_test_audit(**kwargs):
'hostname': kwargs.get('hostname', 'host_1'), 'hostname': kwargs.get('hostname', 'host_1'),
'start_time': kwargs.get('start_time'), 'start_time': kwargs.get('start_time'),
'end_time': kwargs.get('end_time'), 'end_time': kwargs.get('end_time'),
'force': kwargs.get('force', False) 'force': kwargs.get('force', False),
'status_message': kwargs.get('status_message', None),
} }
# ObjectField doesn't allow None nor dict, so if we want to simulate a # ObjectField doesn't allow None nor dict, so if we want to simulate a
# non-eager object loading, the field should not be referenced at all. # non-eager object loading, the field should not be referenced at all.
@@ -141,6 +141,7 @@ def get_test_action(**kwargs):
'created_at': kwargs.get('created_at'), 'created_at': kwargs.get('created_at'),
'updated_at': kwargs.get('updated_at'), 'updated_at': kwargs.get('updated_at'),
'deleted_at': kwargs.get('deleted_at'), 'deleted_at': kwargs.get('deleted_at'),
'status_message': kwargs.get('status_message', None),
} }
# ObjectField doesn't allow None nor dict, so if we want to simulate a # ObjectField doesn't allow None nor dict, so if we want to simulate a
@@ -177,6 +178,7 @@ def get_test_action_plan(**kwargs):
'updated_at': kwargs.get('updated_at'), 'updated_at': kwargs.get('updated_at'),
'deleted_at': kwargs.get('deleted_at'), 'deleted_at': kwargs.get('deleted_at'),
'hostname': kwargs.get('hostname', 'host_1'), 'hostname': kwargs.get('hostname', 'host_1'),
'status_message': kwargs.get('status_message', None),
} }
# ObjectField doesn't allow None nor dict, so if we want to simulate a # ObjectField doesn't allow None nor dict, so if we want to simulate a

View File

@@ -191,7 +191,7 @@ class TestActionScheduling(base.DbTestCase):
for src, dst in edges: for src, dst in edges:
for key in ('id', 'action_plan', 'action_plan_id', 'created_at', for key in ('id', 'action_plan', 'action_plan_id', 'created_at',
'input_parameters', 'deleted_at', 'updated_at', 'input_parameters', 'deleted_at', 'updated_at',
'state'): 'state', 'status_message'):
del src[key] del src[key]
del dst[key] del dst[key]
@@ -247,7 +247,7 @@ class TestActionScheduling(base.DbTestCase):
for src, dst in edges: for src, dst in edges:
for key in ('id', 'action_plan', 'action_plan_id', 'created_at', for key in ('id', 'action_plan', 'action_plan_id', 'created_at',
'input_parameters', 'deleted_at', 'updated_at', 'input_parameters', 'deleted_at', 'updated_at',
'state'): 'state', 'status_message'):
del src[key] del src[key]
del dst[key] del dst[key]
@@ -310,7 +310,7 @@ class TestActionScheduling(base.DbTestCase):
for src, dst in edges: for src, dst in edges:
for key in ('id', 'action_plan', 'action_plan_id', 'created_at', for key in ('id', 'action_plan', 'action_plan_id', 'created_at',
'input_parameters', 'deleted_at', 'updated_at', 'input_parameters', 'deleted_at', 'updated_at',
'state'): 'state', 'status_message'):
del src[key] del src[key]
del dst[key] del dst[key]
@@ -406,7 +406,7 @@ class TestActionScheduling(base.DbTestCase):
for src, dst in edges: for src, dst in edges:
for key in ('id', 'action_plan', 'action_plan_id', 'created_at', for key in ('id', 'action_plan', 'action_plan_id', 'created_at',
'input_parameters', 'deleted_at', 'updated_at', 'input_parameters', 'deleted_at', 'updated_at',
'state'): 'state', 'status_message'):
del src[key] del src[key]
del dst[key] del dst[key]
@@ -505,7 +505,7 @@ class TestActionScheduling(base.DbTestCase):
for src, dst in edges: for src, dst in edges:
for key in ('id', 'action_plan', 'action_plan_id', 'created_at', for key in ('id', 'action_plan', 'action_plan_id', 'created_at',
'input_parameters', 'deleted_at', 'updated_at', 'input_parameters', 'deleted_at', 'updated_at',
'state'): 'state', 'status_message'):
del src[key] del src[key]
del dst[key] del dst[key]
@@ -609,7 +609,7 @@ class TestActionScheduling(base.DbTestCase):
for src, dst in edges: for src, dst in edges:
for key in ('id', 'action_plan', 'action_plan_id', 'created_at', for key in ('id', 'action_plan', 'action_plan_id', 'created_at',
'input_parameters', 'deleted_at', 'updated_at', 'input_parameters', 'deleted_at', 'updated_at',
'state'): 'state', 'status_message'):
del src[key] del src[key]
del dst[key] del dst[key]
@@ -730,7 +730,7 @@ class TestActionScheduling(base.DbTestCase):
for src, dst in edges: for src, dst in edges:
for key in ('id', 'action_plan', 'action_plan_id', 'created_at', for key in ('id', 'action_plan', 'action_plan_id', 'created_at',
'input_parameters', 'deleted_at', 'updated_at', 'input_parameters', 'deleted_at', 'updated_at',
'state'): 'state', 'status_message'):
del src[key] del src[key]
del dst[key] del dst[key]
@@ -885,7 +885,7 @@ class TestActionScheduling(base.DbTestCase):
for src, dst in edges: for src, dst in edges:
for key in ('id', 'action_plan', 'action_plan_id', 'created_at', for key in ('id', 'action_plan', 'action_plan_id', 'created_at',
'input_parameters', 'deleted_at', 'updated_at', 'input_parameters', 'deleted_at', 'updated_at',
'state'): 'state', 'status_message'):
del src[key] del src[key]
del dst[key] del dst[key]

View File

@@ -59,7 +59,8 @@ class TestActionNotification(base.DbTestCase):
action = utils.create_test_action( action = utils.create_test_action(
mock.Mock(), state=objects.action.State.ONGOING, mock.Mock(), state=objects.action.State.ONGOING,
action_type='nop', input_parameters={'param1': 1, 'param2': 2}, action_type='nop', input_parameters={'param1': 1, 'param2': 2},
parents=[], action_plan_id=self.action_plan.id) parents=[], action_plan_id=self.action_plan.id,
status_message="Test status message")
notifications.action.send_update( notifications.action.send_update(
mock.MagicMock(), action, host='node0', mock.MagicMock(), action, host='node0',
old_state=objects.action.State.PENDING) old_state=objects.action.State.PENDING)
@@ -74,7 +75,7 @@ class TestActionNotification(base.DbTestCase):
self.assertDictEqual( self.assertDictEqual(
{ {
'watcher_object.namespace': 'watcher', 'watcher_object.namespace': 'watcher',
'watcher_object.version': '1.0', 'watcher_object.version': '1.1',
'watcher_object.name': 'ActionUpdatePayload', 'watcher_object.name': 'ActionUpdatePayload',
'watcher_object.data': { 'watcher_object.data': {
'uuid': '10a47dd1-4874-4298-91cf-eff046dbdb8d', 'uuid': '10a47dd1-4874-4298-91cf-eff046dbdb8d',
@@ -86,17 +87,18 @@ class TestActionNotification(base.DbTestCase):
'updated_at': None, 'updated_at': None,
'state_update': { 'state_update': {
'watcher_object.namespace': 'watcher', 'watcher_object.namespace': 'watcher',
'watcher_object.version': '1.0', 'watcher_object.version': '1.1',
'watcher_object.name': 'ActionStateUpdatePayload', 'watcher_object.name': 'ActionStateUpdatePayload',
'watcher_object.data': { 'watcher_object.data': {
'old_state': 'PENDING', 'old_state': 'PENDING',
'state': 'ONGOING' 'state': 'ONGOING',
'status_message': 'Test status message'
} }
}, },
'state': 'ONGOING', 'state': 'ONGOING',
'action_plan': { 'action_plan': {
'watcher_object.namespace': 'watcher', 'watcher_object.namespace': 'watcher',
'watcher_object.version': '1.1', 'watcher_object.version': '1.2',
'watcher_object.name': 'TerseActionPlanPayload', 'watcher_object.name': 'TerseActionPlanPayload',
'watcher_object.data': { 'watcher_object.data': {
'uuid': '76be87bd-3422-43f9-93a0-e85a577e3061', 'uuid': '76be87bd-3422-43f9-93a0-e85a577e3061',
@@ -108,12 +110,14 @@ class TestActionNotification(base.DbTestCase):
'-91cf-eff046dbdb8d', '-91cf-eff046dbdb8d',
'strategy_uuid': 'cb3d0b58-4415-4d90' 'strategy_uuid': 'cb3d0b58-4415-4d90'
'-b75b-1e96878730e3', '-b75b-1e96878730e3',
'deleted_at': None 'deleted_at': None,
'status_message': None
} }
}, },
'parents': [], 'parents': [],
'action_type': 'nop', 'action_type': 'nop',
'deleted_at': None 'deleted_at': None,
'status_message': 'Test status message'
} }
}, },
payload payload
@@ -135,7 +139,7 @@ class TestActionNotification(base.DbTestCase):
self.assertDictEqual( self.assertDictEqual(
{ {
'watcher_object.namespace': 'watcher', 'watcher_object.namespace': 'watcher',
'watcher_object.version': '1.0', 'watcher_object.version': '1.1',
'watcher_object.name': 'ActionCreatePayload', 'watcher_object.name': 'ActionCreatePayload',
'watcher_object.data': { 'watcher_object.data': {
'uuid': '10a47dd1-4874-4298-91cf-eff046dbdb8d', 'uuid': '10a47dd1-4874-4298-91cf-eff046dbdb8d',
@@ -148,7 +152,7 @@ class TestActionNotification(base.DbTestCase):
'state': 'PENDING', 'state': 'PENDING',
'action_plan': { 'action_plan': {
'watcher_object.namespace': 'watcher', 'watcher_object.namespace': 'watcher',
'watcher_object.version': '1.1', 'watcher_object.version': '1.2',
'watcher_object.name': 'TerseActionPlanPayload', 'watcher_object.name': 'TerseActionPlanPayload',
'watcher_object.data': { 'watcher_object.data': {
'uuid': '76be87bd-3422-43f9-93a0-e85a577e3061', 'uuid': '76be87bd-3422-43f9-93a0-e85a577e3061',
@@ -160,12 +164,14 @@ class TestActionNotification(base.DbTestCase):
'-91cf-eff046dbdb8d', '-91cf-eff046dbdb8d',
'strategy_uuid': 'cb3d0b58-4415-4d90' 'strategy_uuid': 'cb3d0b58-4415-4d90'
'-b75b-1e96878730e3', '-b75b-1e96878730e3',
'deleted_at': None 'deleted_at': None,
'status_message': None
} }
}, },
'parents': [], 'parents': [],
'action_type': 'nop', 'action_type': 'nop',
'deleted_at': None 'deleted_at': None,
'status_message': None
} }
}, },
payload payload
@@ -189,7 +195,7 @@ class TestActionNotification(base.DbTestCase):
self.assertDictEqual( self.assertDictEqual(
{ {
'watcher_object.namespace': 'watcher', 'watcher_object.namespace': 'watcher',
'watcher_object.version': '1.0', 'watcher_object.version': '1.1',
'watcher_object.name': 'ActionDeletePayload', 'watcher_object.name': 'ActionDeletePayload',
'watcher_object.data': { 'watcher_object.data': {
'uuid': '10a47dd1-4874-4298-91cf-eff046dbdb8d', 'uuid': '10a47dd1-4874-4298-91cf-eff046dbdb8d',
@@ -202,7 +208,7 @@ class TestActionNotification(base.DbTestCase):
'state': 'DELETED', 'state': 'DELETED',
'action_plan': { 'action_plan': {
'watcher_object.namespace': 'watcher', 'watcher_object.namespace': 'watcher',
'watcher_object.version': '1.1', 'watcher_object.version': '1.2',
'watcher_object.name': 'TerseActionPlanPayload', 'watcher_object.name': 'TerseActionPlanPayload',
'watcher_object.data': { 'watcher_object.data': {
'uuid': '76be87bd-3422-43f9-93a0-e85a577e3061', 'uuid': '76be87bd-3422-43f9-93a0-e85a577e3061',
@@ -214,12 +220,14 @@ class TestActionNotification(base.DbTestCase):
'-91cf-eff046dbdb8d', '-91cf-eff046dbdb8d',
'strategy_uuid': 'cb3d0b58-4415-4d90' 'strategy_uuid': 'cb3d0b58-4415-4d90'
'-b75b-1e96878730e3', '-b75b-1e96878730e3',
'deleted_at': None 'deleted_at': None,
'status_message': None
} }
}, },
'parents': [], 'parents': [],
'action_type': 'nop', 'action_type': 'nop',
'deleted_at': None 'deleted_at': None,
'status_message': None
} }
}, },
payload payload
@@ -244,7 +252,7 @@ class TestActionNotification(base.DbTestCase):
'event_type': 'action.execution.start', 'event_type': 'action.execution.start',
'payload': { 'payload': {
'watcher_object.namespace': 'watcher', 'watcher_object.namespace': 'watcher',
'watcher_object.version': '1.0', 'watcher_object.version': '1.1',
'watcher_object.name': 'ActionExecutionPayload', 'watcher_object.name': 'ActionExecutionPayload',
'watcher_object.data': { 'watcher_object.data': {
'uuid': '10a47dd1-4874-4298-91cf-eff046dbdb8d', 'uuid': '10a47dd1-4874-4298-91cf-eff046dbdb8d',
@@ -258,7 +266,7 @@ class TestActionNotification(base.DbTestCase):
'state': 'PENDING', 'state': 'PENDING',
'action_plan': { 'action_plan': {
'watcher_object.namespace': 'watcher', 'watcher_object.namespace': 'watcher',
'watcher_object.version': '1.1', 'watcher_object.version': '1.2',
'watcher_object.name': 'TerseActionPlanPayload', 'watcher_object.name': 'TerseActionPlanPayload',
'watcher_object.data': { 'watcher_object.data': {
'uuid': '76be87bd-3422-43f9-93a0-e85a577e3061', 'uuid': '76be87bd-3422-43f9-93a0-e85a577e3061',
@@ -270,12 +278,14 @@ class TestActionNotification(base.DbTestCase):
'-91cf-eff046dbdb8d', '-91cf-eff046dbdb8d',
'strategy_uuid': 'cb3d0b58-4415-4d90' 'strategy_uuid': 'cb3d0b58-4415-4d90'
'-b75b-1e96878730e3', '-b75b-1e96878730e3',
'deleted_at': None 'deleted_at': None,
'status_message': None
} }
}, },
'parents': [], 'parents': [],
'action_type': 'nop', 'action_type': 'nop',
'deleted_at': None 'deleted_at': None,
'status_message': None
} }
} }
}, },
@@ -283,11 +293,13 @@ class TestActionNotification(base.DbTestCase):
) )
def test_send_action_execution_with_error(self): def test_send_action_execution_with_error(self):
self.action_plan.status_message = 'Action plan status message'
self.action_plan.save()
action = utils.create_test_action( action = utils.create_test_action(
mock.Mock(), state=objects.action.State.FAILED, mock.Mock(), state=objects.action.State.FAILED,
action_type='nop', input_parameters={'param1': 1, 'param2': 2}, action_type='nop', input_parameters={'param1': 1, 'param2': 2},
parents=[], action_plan_id=self.action_plan.id) parents=[], action_plan_id=self.action_plan.id,
status_message='Action status message')
try: try:
# This is to load the exception in sys.exc_info() # This is to load the exception in sys.exc_info()
raise exception.WatcherException("TEST") raise exception.WatcherException("TEST")
@@ -304,7 +316,7 @@ class TestActionNotification(base.DbTestCase):
'event_type': 'action.execution.error', 'event_type': 'action.execution.error',
'payload': { 'payload': {
'watcher_object.namespace': 'watcher', 'watcher_object.namespace': 'watcher',
'watcher_object.version': '1.0', 'watcher_object.version': '1.1',
'watcher_object.name': 'ActionExecutionPayload', 'watcher_object.name': 'ActionExecutionPayload',
'watcher_object.data': { 'watcher_object.data': {
'uuid': '10a47dd1-4874-4298-91cf-eff046dbdb8d', 'uuid': '10a47dd1-4874-4298-91cf-eff046dbdb8d',
@@ -331,24 +343,26 @@ class TestActionNotification(base.DbTestCase):
'state': 'FAILED', 'state': 'FAILED',
'action_plan': { 'action_plan': {
'watcher_object.namespace': 'watcher', 'watcher_object.namespace': 'watcher',
'watcher_object.version': '1.1', 'watcher_object.version': '1.2',
'watcher_object.name': 'TerseActionPlanPayload', 'watcher_object.name': 'TerseActionPlanPayload',
'watcher_object.data': { 'watcher_object.data': {
'uuid': '76be87bd-3422-43f9-93a0-e85a577e3061', 'uuid': '76be87bd-3422-43f9-93a0-e85a577e3061',
'global_efficacy': [], 'global_efficacy': [],
'created_at': '2016-10-18T09:52:05Z', 'created_at': '2016-10-18T09:52:05Z',
'updated_at': None, 'updated_at': '2016-10-18T09:52:05Z',
'state': 'ONGOING', 'state': 'ONGOING',
'audit_uuid': '10a47dd1-4874-4298' 'audit_uuid': '10a47dd1-4874-4298'
'-91cf-eff046dbdb8d', '-91cf-eff046dbdb8d',
'strategy_uuid': 'cb3d0b58-4415-4d90' 'strategy_uuid': 'cb3d0b58-4415-4d90'
'-b75b-1e96878730e3', '-b75b-1e96878730e3',
'deleted_at': None 'deleted_at': None,
'status_message': 'Action plan status message'
} }
}, },
'parents': [], 'parents': [],
'action_type': 'nop', 'action_type': 'nop',
'deleted_at': None 'deleted_at': None,
'status_message': 'Action status message'
} }
} }
}, },
@@ -374,7 +388,7 @@ class TestActionNotification(base.DbTestCase):
'event_type': 'action.cancel.start', 'event_type': 'action.cancel.start',
'payload': { 'payload': {
'watcher_object.namespace': 'watcher', 'watcher_object.namespace': 'watcher',
'watcher_object.version': '1.0', 'watcher_object.version': '1.1',
'watcher_object.name': 'ActionCancelPayload', 'watcher_object.name': 'ActionCancelPayload',
'watcher_object.data': { 'watcher_object.data': {
'uuid': '10a47dd1-4874-4298-91cf-eff046dbdb8d', 'uuid': '10a47dd1-4874-4298-91cf-eff046dbdb8d',
@@ -388,7 +402,7 @@ class TestActionNotification(base.DbTestCase):
'state': 'PENDING', 'state': 'PENDING',
'action_plan': { 'action_plan': {
'watcher_object.namespace': 'watcher', 'watcher_object.namespace': 'watcher',
'watcher_object.version': '1.1', 'watcher_object.version': '1.2',
'watcher_object.name': 'TerseActionPlanPayload', 'watcher_object.name': 'TerseActionPlanPayload',
'watcher_object.data': { 'watcher_object.data': {
'uuid': '76be87bd-3422-43f9-93a0-e85a577e3061', 'uuid': '76be87bd-3422-43f9-93a0-e85a577e3061',
@@ -400,12 +414,14 @@ class TestActionNotification(base.DbTestCase):
'-91cf-eff046dbdb8d', '-91cf-eff046dbdb8d',
'strategy_uuid': 'cb3d0b58-4415-4d90' 'strategy_uuid': 'cb3d0b58-4415-4d90'
'-b75b-1e96878730e3', '-b75b-1e96878730e3',
'deleted_at': None 'deleted_at': None,
'status_message': None
} }
}, },
'parents': [], 'parents': [],
'action_type': 'nop', 'action_type': 'nop',
'deleted_at': None 'deleted_at': None,
'status_message': None
} }
} }
}, },
@@ -434,7 +450,7 @@ class TestActionNotification(base.DbTestCase):
'event_type': 'action.cancel.error', 'event_type': 'action.cancel.error',
'payload': { 'payload': {
'watcher_object.namespace': 'watcher', 'watcher_object.namespace': 'watcher',
'watcher_object.version': '1.0', 'watcher_object.version': '1.1',
'watcher_object.name': 'ActionCancelPayload', 'watcher_object.name': 'ActionCancelPayload',
'watcher_object.data': { 'watcher_object.data': {
'uuid': '10a47dd1-4874-4298-91cf-eff046dbdb8d', 'uuid': '10a47dd1-4874-4298-91cf-eff046dbdb8d',
@@ -461,7 +477,7 @@ class TestActionNotification(base.DbTestCase):
'state': 'FAILED', 'state': 'FAILED',
'action_plan': { 'action_plan': {
'watcher_object.namespace': 'watcher', 'watcher_object.namespace': 'watcher',
'watcher_object.version': '1.1', 'watcher_object.version': '1.2',
'watcher_object.name': 'TerseActionPlanPayload', 'watcher_object.name': 'TerseActionPlanPayload',
'watcher_object.data': { 'watcher_object.data': {
'uuid': '76be87bd-3422-43f9-93a0-e85a577e3061', 'uuid': '76be87bd-3422-43f9-93a0-e85a577e3061',
@@ -473,12 +489,14 @@ class TestActionNotification(base.DbTestCase):
'-91cf-eff046dbdb8d', '-91cf-eff046dbdb8d',
'strategy_uuid': 'cb3d0b58-4415-4d90' 'strategy_uuid': 'cb3d0b58-4415-4d90'
'-b75b-1e96878730e3', '-b75b-1e96878730e3',
'deleted_at': None 'deleted_at': None,
'status_message': None
} }
}, },
'parents': [], 'parents': [],
'action_type': 'nop', 'action_type': 'nop',
'deleted_at': None 'deleted_at': None,
'status_message': None
} }
} }
}, },

View File

@@ -57,7 +57,8 @@ class TestActionPlanNotification(base.DbTestCase):
action_plan = utils.create_test_action_plan( action_plan = utils.create_test_action_plan(
mock.Mock(), state=objects.action_plan.State.ONGOING, mock.Mock(), state=objects.action_plan.State.ONGOING,
audit_id=self.audit.id, strategy_id=self.strategy.id, audit_id=self.audit.id, strategy_id=self.strategy.id,
audit=self.audit, strategy=self.strategy) audit=self.audit, strategy=self.strategy,
status_message="Test status message")
notifications.action_plan.send_update( notifications.action_plan.send_update(
mock.MagicMock(), action_plan, host='node0', mock.MagicMock(), action_plan, host='node0',
old_state=objects.action_plan.State.PENDING) old_state=objects.action_plan.State.PENDING)
@@ -72,7 +73,7 @@ class TestActionPlanNotification(base.DbTestCase):
self.assertDictEqual( self.assertDictEqual(
{ {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.1", "watcher_object.version": "1.2",
"watcher_object.data": { "watcher_object.data": {
"global_efficacy": [], "global_efficacy": [],
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3", "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
@@ -108,22 +109,25 @@ class TestActionPlanNotification(base.DbTestCase):
"state": "PENDING", "state": "PENDING",
"updated_at": None, "updated_at": None,
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"audit_type": "ONESHOT" "audit_type": "ONESHOT",
"status_message": None
}, },
"watcher_object.name": "TerseAuditPayload", "watcher_object.name": "TerseAuditPayload",
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.2" "watcher_object.version": "1.3"
}, },
"deleted_at": None, "deleted_at": None,
"state": "ONGOING", "state": "ONGOING",
"status_message": 'Test status message',
"updated_at": None, "updated_at": None,
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"state_update": { "state_update": {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.0", "watcher_object.version": "1.1",
"watcher_object.data": { "watcher_object.data": {
"old_state": "PENDING", "old_state": "PENDING",
"state": "ONGOING" "state": "ONGOING",
"status_message": "Test status message",
}, },
"watcher_object.name": "ActionPlanStateUpdatePayload" "watcher_object.name": "ActionPlanStateUpdatePayload"
}, },
@@ -149,7 +153,7 @@ class TestActionPlanNotification(base.DbTestCase):
self.assertDictEqual( self.assertDictEqual(
{ {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.1", "watcher_object.version": "1.2",
"watcher_object.data": { "watcher_object.data": {
"global_efficacy": [], "global_efficacy": [],
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3", "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
@@ -185,14 +189,16 @@ class TestActionPlanNotification(base.DbTestCase):
"state": "PENDING", "state": "PENDING",
"updated_at": None, "updated_at": None,
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"audit_type": "ONESHOT" "audit_type": "ONESHOT",
"status_message": None
}, },
"watcher_object.name": "TerseAuditPayload", "watcher_object.name": "TerseAuditPayload",
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.2" "watcher_object.version": "1.3"
}, },
"deleted_at": None, "deleted_at": None,
"state": "PENDING", "state": "PENDING",
"status_message": None,
"updated_at": None, "updated_at": None,
"created_at": None, "created_at": None,
}, },
@@ -218,7 +224,7 @@ class TestActionPlanNotification(base.DbTestCase):
self.assertDictEqual( self.assertDictEqual(
{ {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.1", "watcher_object.version": "1.2",
"watcher_object.data": { "watcher_object.data": {
"global_efficacy": [], "global_efficacy": [],
"strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3", "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
@@ -254,14 +260,16 @@ class TestActionPlanNotification(base.DbTestCase):
"state": "PENDING", "state": "PENDING",
"updated_at": None, "updated_at": None,
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"audit_type": "ONESHOT" "audit_type": "ONESHOT",
"status_message": None
}, },
"watcher_object.name": "TerseAuditPayload", "watcher_object.name": "TerseAuditPayload",
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.2" "watcher_object.version": "1.3"
}, },
"deleted_at": None, "deleted_at": None,
"state": "DELETED", "state": "DELETED",
"status_message": None,
"updated_at": None, "updated_at": None,
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
}, },
@@ -297,7 +305,7 @@ class TestActionPlanNotification(base.DbTestCase):
"audit": { "audit": {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.name": "TerseAuditPayload", "watcher_object.name": "TerseAuditPayload",
"watcher_object.version": "1.2", "watcher_object.version": "1.3",
"watcher_object.data": { "watcher_object.data": {
"interval": None, "interval": None,
"next_run_time": None, "next_run_time": None,
@@ -313,11 +321,13 @@ class TestActionPlanNotification(base.DbTestCase):
"state": "PENDING", "state": "PENDING",
"updated_at": None, "updated_at": None,
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"audit_type": "ONESHOT" "audit_type": "ONESHOT",
"status_message": None
} }
}, },
"global_efficacy": [], "global_efficacy": [],
"state": "ONGOING", "state": "ONGOING",
"status_message": None,
"strategy_uuid": ( "strategy_uuid": (
"cb3d0b58-4415-4d90-b75b-1e96878730e3"), "cb3d0b58-4415-4d90-b75b-1e96878730e3"),
"strategy": { "strategy": {
@@ -339,7 +349,7 @@ class TestActionPlanNotification(base.DbTestCase):
}, },
"watcher_object.name": "ActionPlanActionPayload", "watcher_object.name": "ActionPlanActionPayload",
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.1" "watcher_object.version": "1.2"
} }
}, },
notification notification
@@ -399,14 +409,16 @@ class TestActionPlanNotification(base.DbTestCase):
"state": "PENDING", "state": "PENDING",
"updated_at": None, "updated_at": None,
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"audit_type": "ONESHOT" "audit_type": "ONESHOT",
"status_message": None
}, },
"watcher_object.name": "TerseAuditPayload", "watcher_object.name": "TerseAuditPayload",
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.2" "watcher_object.version": "1.3"
}, },
"global_efficacy": [], "global_efficacy": [],
"state": "ONGOING", "state": "ONGOING",
"status_message": None,
"strategy_uuid": ( "strategy_uuid": (
"cb3d0b58-4415-4d90-b75b-1e96878730e3"), "cb3d0b58-4415-4d90-b75b-1e96878730e3"),
"strategy": { "strategy": {
@@ -428,7 +440,7 @@ class TestActionPlanNotification(base.DbTestCase):
}, },
"watcher_object.name": "ActionPlanActionPayload", "watcher_object.name": "ActionPlanActionPayload",
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.1" "watcher_object.version": "1.2"
} }
}, },
notification notification
@@ -460,7 +472,7 @@ class TestActionPlanNotification(base.DbTestCase):
"audit": { "audit": {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.name": "TerseAuditPayload", "watcher_object.name": "TerseAuditPayload",
"watcher_object.version": "1.2", "watcher_object.version": "1.3",
"watcher_object.data": { "watcher_object.data": {
"interval": None, "interval": None,
"next_run_time": None, "next_run_time": None,
@@ -476,11 +488,13 @@ class TestActionPlanNotification(base.DbTestCase):
"state": "PENDING", "state": "PENDING",
"updated_at": None, "updated_at": None,
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"audit_type": "ONESHOT" "audit_type": "ONESHOT",
"status_message": None
} }
}, },
"global_efficacy": [], "global_efficacy": [],
"state": "ONGOING", "state": "ONGOING",
"status_message": None,
"strategy_uuid": ( "strategy_uuid": (
"cb3d0b58-4415-4d90-b75b-1e96878730e3"), "cb3d0b58-4415-4d90-b75b-1e96878730e3"),
"strategy": { "strategy": {
@@ -502,7 +516,7 @@ class TestActionPlanNotification(base.DbTestCase):
}, },
"watcher_object.name": "ActionPlanCancelPayload", "watcher_object.name": "ActionPlanCancelPayload",
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.1" "watcher_object.version": "1.2"
} }
}, },
notification notification
@@ -562,14 +576,16 @@ class TestActionPlanNotification(base.DbTestCase):
"state": "PENDING", "state": "PENDING",
"updated_at": None, "updated_at": None,
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"audit_type": "ONESHOT" "audit_type": "ONESHOT",
"status_message": None
}, },
"watcher_object.name": "TerseAuditPayload", "watcher_object.name": "TerseAuditPayload",
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.2" "watcher_object.version": "1.3"
}, },
"global_efficacy": [], "global_efficacy": [],
"state": "ONGOING", "state": "ONGOING",
"status_message": None,
"strategy_uuid": ( "strategy_uuid": (
"cb3d0b58-4415-4d90-b75b-1e96878730e3"), "cb3d0b58-4415-4d90-b75b-1e96878730e3"),
"strategy": { "strategy": {
@@ -591,7 +607,7 @@ class TestActionPlanNotification(base.DbTestCase):
}, },
"watcher_object.name": "ActionPlanCancelPayload", "watcher_object.name": "ActionPlanCancelPayload",
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.1" "watcher_object.version": "1.2"
} }
}, },
notification notification

View File

@@ -70,7 +70,7 @@ class TestAuditNotification(base.DbTestCase):
self.assertDictEqual( self.assertDictEqual(
{ {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.1", "watcher_object.version": "1.2",
"watcher_object.data": { "watcher_object.data": {
"interval": None, "interval": None,
"next_run_time": None, "next_run_time": None,
@@ -115,14 +115,16 @@ class TestAuditNotification(base.DbTestCase):
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"state_update": { "state_update": {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.0", "watcher_object.version": "1.1",
"watcher_object.data": { "watcher_object.data": {
"old_state": "PENDING", "old_state": "PENDING",
"state": "ONGOING" "state": "ONGOING",
"status_message": None
}, },
"watcher_object.name": "AuditStateUpdatePayload" "watcher_object.name": "AuditStateUpdatePayload"
}, },
"audit_type": "ONESHOT" "audit_type": "ONESHOT",
"status_message": None
}, },
"watcher_object.name": "AuditUpdatePayload" "watcher_object.name": "AuditUpdatePayload"
}, },
@@ -132,7 +134,8 @@ class TestAuditNotification(base.DbTestCase):
def test_send_audit_update_without_strategy(self): def test_send_audit_update_without_strategy(self):
audit = utils.get_test_audit( audit = utils.get_test_audit(
mock.Mock(), interval=None, state=objects.audit.State.ONGOING, mock.Mock(), interval=None, state=objects.audit.State.ONGOING,
goal_id=self.goal.id, goal=self.goal) goal_id=self.goal.id, goal=self.goal,
status_message='Fake message')
notifications.audit.send_update( notifications.audit.send_update(
mock.MagicMock(), audit, host='node0', mock.MagicMock(), audit, host='node0',
old_state=objects.audit.State.PENDING) old_state=objects.audit.State.PENDING)
@@ -145,7 +148,7 @@ class TestAuditNotification(base.DbTestCase):
self.assertDictEqual( self.assertDictEqual(
{ {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.1", "watcher_object.version": "1.2",
"watcher_object.data": { "watcher_object.data": {
"interval": None, "interval": None,
"next_run_time": None, "next_run_time": None,
@@ -177,14 +180,16 @@ class TestAuditNotification(base.DbTestCase):
"created_at": None, "created_at": None,
"state_update": { "state_update": {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.0", "watcher_object.version": "1.1",
"watcher_object.data": { "watcher_object.data": {
"old_state": "PENDING", "old_state": "PENDING",
"state": "ONGOING" "state": "ONGOING",
"status_message": "Fake message"
}, },
"watcher_object.name": "AuditStateUpdatePayload" "watcher_object.name": "AuditStateUpdatePayload"
}, },
"audit_type": "ONESHOT" "audit_type": "ONESHOT",
"status_message": "Fake message"
}, },
"watcher_object.name": "AuditUpdatePayload" "watcher_object.name": "AuditUpdatePayload"
}, },
@@ -207,7 +212,7 @@ class TestAuditNotification(base.DbTestCase):
self.assertDictEqual( self.assertDictEqual(
{ {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.1", "watcher_object.version": "1.2",
"watcher_object.data": { "watcher_object.data": {
"interval": None, "interval": None,
"next_run_time": None, "next_run_time": None,
@@ -250,7 +255,8 @@ class TestAuditNotification(base.DbTestCase):
"state": "PENDING", "state": "PENDING",
"updated_at": None, "updated_at": None,
"created_at": None, "created_at": None,
"audit_type": "ONESHOT" "audit_type": "ONESHOT",
"status_message": None
}, },
"watcher_object.name": "AuditCreatePayload" "watcher_object.name": "AuditCreatePayload"
}, },
@@ -273,7 +279,7 @@ class TestAuditNotification(base.DbTestCase):
self.assertDictEqual( self.assertDictEqual(
{ {
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.1", "watcher_object.version": "1.2",
"watcher_object.data": { "watcher_object.data": {
"interval": None, "interval": None,
"next_run_time": None, "next_run_time": None,
@@ -316,7 +322,8 @@ class TestAuditNotification(base.DbTestCase):
"state": "DELETED", "state": "DELETED",
"updated_at": None, "updated_at": None,
"created_at": "2016-10-18T09:52:05Z", "created_at": "2016-10-18T09:52:05Z",
"audit_type": "ONESHOT" "audit_type": "ONESHOT",
"status_message": None
}, },
"watcher_object.name": "AuditDeletePayload" "watcher_object.name": "AuditDeletePayload"
}, },
@@ -386,11 +393,12 @@ class TestAuditNotification(base.DbTestCase):
"watcher_object.version": "1.0" "watcher_object.version": "1.0"
}, },
"updated_at": None, "updated_at": None,
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d" "uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
"status_message": None
}, },
"watcher_object.name": "AuditActionPayload", "watcher_object.name": "AuditActionPayload",
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.1" "watcher_object.version": "1.2"
} }
}, },
notification notification
@@ -473,11 +481,12 @@ class TestAuditNotification(base.DbTestCase):
"watcher_object.version": "1.0" "watcher_object.version": "1.0"
}, },
"updated_at": None, "updated_at": None,
"uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d" "uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
"status_message": None
}, },
"watcher_object.name": "AuditActionPayload", "watcher_object.name": "AuditActionPayload",
"watcher_object.namespace": "watcher", "watcher_object.namespace": "watcher",
"watcher_object.version": "1.1" "watcher_object.version": "1.2"
} }
}, },
notification notification

View File

@@ -254,44 +254,44 @@ expected_notification_fingerprints = {
'ExceptionNotification': '1.0-9b69de0724fda8310d05e18418178866', 'ExceptionNotification': '1.0-9b69de0724fda8310d05e18418178866',
'ExceptionPayload': '1.0-4516ae282a55fe2fd5c754967ee6248b', 'ExceptionPayload': '1.0-4516ae282a55fe2fd5c754967ee6248b',
'NotificationPublisher': '1.0-bbbc1402fb0e443a3eb227cc52b61545', 'NotificationPublisher': '1.0-bbbc1402fb0e443a3eb227cc52b61545',
'TerseAuditPayload': '1.2-0fda1751c39f29b539944c2b44690f65', 'TerseAuditPayload': '1.3-f4fa23834af600ae71b15e2eaff41dc4',
'AuditPayload': '1.2-d30cc1639404ed380b0742b781db690e', 'AuditPayload': '1.3-c6f2aa269a6ea020a0371ad4ac7236bb',
'AuditStateUpdatePayload': '1.0-1a1b606bf14a2c468800c2b010801ce5', 'AuditStateUpdatePayload': '1.1-74b6a28fb14d1f8e9da6cc8a9033fbaf',
'AuditUpdateNotification': '1.0-9b69de0724fda8310d05e18418178866', 'AuditUpdateNotification': '1.0-9b69de0724fda8310d05e18418178866',
'AuditUpdatePayload': '1.1-e32c3f69c353d47948afa44359246828', 'AuditUpdatePayload': '1.2-12970dec38cd622f7bb5670ac1c5dc1f',
'AuditCreateNotification': '1.0-9b69de0724fda8310d05e18418178866', 'AuditCreateNotification': '1.0-9b69de0724fda8310d05e18418178866',
'AuditCreatePayload': '1.1-d30cc1639404ed380b0742b781db690e', 'AuditCreatePayload': '1.2-c6f2aa269a6ea020a0371ad4ac7236bb',
'AuditDeleteNotification': '1.0-9b69de0724fda8310d05e18418178866', 'AuditDeleteNotification': '1.0-9b69de0724fda8310d05e18418178866',
'AuditDeletePayload': '1.1-d30cc1639404ed380b0742b781db690e', 'AuditDeletePayload': '1.2-c6f2aa269a6ea020a0371ad4ac7236bb',
'AuditActionNotification': '1.0-9b69de0724fda8310d05e18418178866', 'AuditActionNotification': '1.0-9b69de0724fda8310d05e18418178866',
'AuditActionPayload': '1.1-3d19c75dd9cdf2a833d0367b234e20d2', 'AuditActionPayload': '1.2-1558683dda8c4d947878cd721db6c50c',
'GoalPayload': '1.0-fa1fecb8b01dd047eef808ded4d50d1a', 'GoalPayload': '1.0-fa1fecb8b01dd047eef808ded4d50d1a',
'StrategyPayload': '1.0-94f01c137b083ac236ae82573c1fcfc1', 'StrategyPayload': '1.0-94f01c137b083ac236ae82573c1fcfc1',
'ActionPlanActionPayload': '1.1-5be9fa7ca9e544322bdded5593e36edb', 'ActionPlanActionPayload': '1.2-9c2a2ddf6128b3ea1ad95d2fc965fdd1',
'ActionPlanCreateNotification': '1.0-9b69de0724fda8310d05e18418178866', 'ActionPlanCreateNotification': '1.0-9b69de0724fda8310d05e18418178866',
'ActionPlanCreatePayload': '1.1-6a3c3bf1d1f822e33633c49088699d4e', 'ActionPlanCreatePayload': '1.2-d5a0360b23d976d66bc8d572a54177f2',
'ActionPlanDeleteNotification': '1.0-9b69de0724fda8310d05e18418178866', 'ActionPlanDeleteNotification': '1.0-9b69de0724fda8310d05e18418178866',
'ActionPlanDeletePayload': '1.1-6a3c3bf1d1f822e33633c49088699d4e', 'ActionPlanDeletePayload': '1.2-d5a0360b23d976d66bc8d572a54177f2',
'ActionPlanPayload': '1.1-6a3c3bf1d1f822e33633c49088699d4e', 'ActionPlanPayload': '1.2-d5a0360b23d976d66bc8d572a54177f2',
'ActionPlanStateUpdatePayload': '1.0-1a1b606bf14a2c468800c2b010801ce5', 'ActionPlanStateUpdatePayload': '1.1-74b6a28fb14d1f8e9da6cc8a9033fbaf',
'ActionPlanUpdateNotification': '1.0-9b69de0724fda8310d05e18418178866', 'ActionPlanUpdateNotification': '1.0-9b69de0724fda8310d05e18418178866',
'ActionPlanUpdatePayload': '1.1-4ecd6571784cec2656725003ce431fdd', 'ActionPlanUpdatePayload': '1.2-29d6519e04e7fa041b6b732bc2a8638a',
'ActionPlanActionNotification': '1.0-9b69de0724fda8310d05e18418178866', 'ActionPlanActionNotification': '1.0-9b69de0724fda8310d05e18418178866',
'ActionPlanCancelNotification': '1.0-9b69de0724fda8310d05e18418178866', 'ActionPlanCancelNotification': '1.0-9b69de0724fda8310d05e18418178866',
'ActionCancelNotification': '1.0-9b69de0724fda8310d05e18418178866', 'ActionCancelNotification': '1.0-9b69de0724fda8310d05e18418178866',
'ActionCreateNotification': '1.0-9b69de0724fda8310d05e18418178866', 'ActionCreateNotification': '1.0-9b69de0724fda8310d05e18418178866',
'ActionCreatePayload': '1.0-519b93b7450319d8928b4b6e6362df31', 'ActionCreatePayload': '1.1-2ac8ce2b37757c7bbb5c794f2021d4ce',
'ActionDeleteNotification': '1.0-9b69de0724fda8310d05e18418178866', 'ActionDeleteNotification': '1.0-9b69de0724fda8310d05e18418178866',
'ActionDeletePayload': '1.0-519b93b7450319d8928b4b6e6362df31', 'ActionDeletePayload': '1.1-2ac8ce2b37757c7bbb5c794f2021d4ce',
'ActionExecutionNotification': '1.0-9b69de0724fda8310d05e18418178866', 'ActionExecutionNotification': '1.0-9b69de0724fda8310d05e18418178866',
'ActionExecutionPayload': '1.0-bff9f820a2abf7bb6d7027b7450157df', 'ActionExecutionPayload': '1.1-b1932d855cc2081d45de50e9705c77fd',
'ActionPayload': '1.0-519b93b7450319d8928b4b6e6362df31', 'ActionPayload': '1.1-2ac8ce2b37757c7bbb5c794f2021d4ce',
'ActionStateUpdatePayload': '1.0-1a1b606bf14a2c468800c2b010801ce5', 'ActionStateUpdatePayload': '1.1-74b6a28fb14d1f8e9da6cc8a9033fbaf',
'ActionUpdateNotification': '1.0-9b69de0724fda8310d05e18418178866', 'ActionUpdateNotification': '1.0-9b69de0724fda8310d05e18418178866',
'ActionUpdatePayload': '1.0-03306c7e7f4d49ac328c261eff6b30b8', 'ActionUpdatePayload': '1.1-97da2932212857c4340e9d114dfd8985',
'ActionPlanCancelPayload': '1.1-5be9fa7ca9e544322bdded5593e36edb', 'ActionPlanCancelPayload': '1.2-9c2a2ddf6128b3ea1ad95d2fc965fdd1',
'ActionCancelPayload': '1.0-bff9f820a2abf7bb6d7027b7450157df', 'ActionCancelPayload': '1.1-b1932d855cc2081d45de50e9705c77fd',
'TerseActionPlanPayload': '1.1-63008f013817407df9194c2a59fda6b0', 'TerseActionPlanPayload': '1.2-4c63201dc30b407be0e39be2aecc3f2b',
'ServiceUpdateNotification': '1.0-9b69de0724fda8310d05e18418178866', 'ServiceUpdateNotification': '1.0-9b69de0724fda8310d05e18418178866',
'ServicePayload': '1.0-9c5a9bc51e6606e0ec3cf95baf698f4f', 'ServicePayload': '1.0-9c5a9bc51e6606e0ec3cf95baf698f4f',
'ServiceStatusUpdatePayload': '1.0-1a1b606bf14a2c468800c2b010801ce5', 'ServiceStatusUpdatePayload': '1.0-1a1b606bf14a2c468800c2b010801ce5',

View File

@@ -172,7 +172,8 @@ class TestCreateDeleteActionObject(base.DbTestCase):
self.fake_audit = utils.create_test_audit() self.fake_audit = utils.create_test_audit()
self.fake_action_plan = utils.create_test_action_plan() self.fake_action_plan = utils.create_test_action_plan()
self.fake_action = utils.get_test_action( self.fake_action = utils.get_test_action(
created_at=timeutils.utcnow()) created_at=timeutils.utcnow(),
status_message="Fake status message")
@mock.patch.object(db_api.Connection, 'create_action') @mock.patch.object(db_api.Connection, 'create_action')
def test_create(self, mock_create_action): def test_create(self, mock_create_action):
@@ -184,6 +185,7 @@ class TestCreateDeleteActionObject(base.DbTestCase):
tzinfo=datetime.timezone.utc) tzinfo=datetime.timezone.utc)
mock_create_action.assert_called_once_with(expected_action) mock_create_action.assert_called_once_with(expected_action)
self.assertEqual(self.context, action._context) self.assertEqual(self.context, action._context)
self.assertEqual("Fake status message", action.status_message)
@mock.patch.object(notifications.action, 'send_delete') @mock.patch.object(notifications.action, 'send_delete')
@mock.patch.object(notifications.action, 'send_update') @mock.patch.object(notifications.action, 'send_update')

View File

@@ -410,9 +410,9 @@ expected_object_fingerprints = {
'Goal': '1.0-93881622db05e7b67a65ca885b4a022e', 'Goal': '1.0-93881622db05e7b67a65ca885b4a022e',
'Strategy': '1.1-73f164491bdd4c034f48083a51bdeb7b', 'Strategy': '1.1-73f164491bdd4c034f48083a51bdeb7b',
'AuditTemplate': '1.1-b291973ffc5efa2c61b24fe34fdccc0b', 'AuditTemplate': '1.1-b291973ffc5efa2c61b24fe34fdccc0b',
'Audit': '1.7-19bc991c0b048263df021a36c8624f4d', 'Audit': '1.8-9cadb11a1fbe7200fb32891b37672a62',
'ActionPlan': '2.2-3331270cb3666c93408934826d03c08d', 'ActionPlan': '2.3-dad26bdb60307f461572739463108a59',
'Action': '2.0-1dd4959a7e7ac30c62ef170fe08dd935', 'Action': '2.1-71073c74c2ecc3a3d7c7103d0072d366',
'EfficacyIndicator': '1.0-655b71234a82bc7478aff964639c4bb0', 'EfficacyIndicator': '1.0-655b71234a82bc7478aff964639c4bb0',
'ScoringEngine': '1.0-4abbe833544000728e17bd9e83f97576', 'ScoringEngine': '1.0-4abbe833544000728e17bd9e83f97576',
'Service': '1.0-4b35b99ada9677a882c9de2b30212f35', 'Service': '1.0-4b35b99ada9677a882c9de2b30212f35',