From 0d92b2e7039b8b855772ff7e988d71e78059a2b3 Mon Sep 17 00:00:00 2001 From: beeankha Date: Wed, 27 Nov 2019 16:20:56 -0500 Subject: [PATCH 1/3] Enable approval-related email notifications to send properly --- .../notifications/custom_notification_base.py | 26 ++++++++++++------- awx/main/notifications/email_backend.py | 20 +++++++++++--- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/awx/main/notifications/custom_notification_base.py b/awx/main/notifications/custom_notification_base.py index b7038ec867..d7a6ff898e 100644 --- a/awx/main/notifications/custom_notification_base.py +++ b/awx/main/notifications/custom_notification_base.py @@ -6,15 +6,23 @@ class CustomNotificationBase(object): DEFAULT_MSG = "{{ job_friendly_name }} #{{ job.id }} '{{ job.name }}' {{ job.status }}: {{ url }}" DEFAULT_BODY = "{{ job_friendly_name }} #{{ job.id }} had status {{ job.status }}, view details at {{ url }}\n\n{{ job_metadata }}" + DEFAULT_APPROVAL_RUNNING_MSG = "The approval node '{{ approval_node_name }}' needs review. This node can be viewed at: {{ workflow_url }}" + DEFAULT_APPROVAL_RUNNING_BODY = "'{{ approval_node_name }}' needs review. This approval node can be viewed at: {{ workflow_url }}\n\n{{ job_metadata }}" + + DEFAULT_APPROVAL_APPROVED_MSG = "The approval node '{{ approval_node_name }}' was approved. {{ workflow_url }}" + DEFAULT_APPROVAL_APPROVED_BODY = "The approval node '{{ approval_node_name }}' was approved. {{ workflow_url }}\n\n{{ job_metadata }}" + + DEFAULT_APPROVAL_TIMEOUT_MSG = "The approval node '{{ approval_node_name }}' has timed out. {{ workflow_url }}" + DEFAULT_APPROVAL_TIMEOUT_BODY = "The approval node '{{ approval_node_name }}' has timed out. {{ workflow_url }}\n\n{{ job_metadata }}" + + DEFAULT_APPROVAL_DENIED_MSG = "The approval node '{{ approval_node_name }}' was denied. {{ workflow_url }}" + DEFAULT_APPROVAL_DENIED_BODY = "The approval node '{{ approval_node_name }}' was denied. {{ workflow_url }}\n\n{{ job_metadata }}" + + default_messages = {"started": {"message": DEFAULT_MSG, "body": None}, "success": {"message": DEFAULT_MSG, "body": None}, "error": {"message": DEFAULT_MSG, "body": None}, - "workflow_approval": {"running": {"message": 'The approval node "{{ approval_node_name }}" needs review. ' - 'This node can be viewed at: {{ workflow_url }}', - "body": None}, - "approved": {"message": 'The approval node "{{ approval_node_name }}" was approved. {{ workflow_url }}', - "body": None}, - "timed_out": {"message": 'The approval node "{{ approval_node_name }}" has timed out. {{ workflow_url }}', - "body": None}, - "denied": {"message": 'The approval node "{{ approval_node_name }}" was denied. {{ workflow_url }}', - "body": None}}} + "workflow_approval": {"running": {"message": DEFAULT_APPROVAL_RUNNING_MSG, "body": None}, + "approved": {"message": DEFAULT_APPROVAL_APPROVED_MSG, "body": None}, + "timed_out": {"message": DEFAULT_APPROVAL_TIMEOUT_MSG, "body": None}, + "denied": {"message": DEFAULT_APPROVAL_DENIED_MSG, "body": None}}} diff --git a/awx/main/notifications/email_backend.py b/awx/main/notifications/email_backend.py index 2b9c7d8d58..657b18d282 100644 --- a/awx/main/notifications/email_backend.py +++ b/awx/main/notifications/email_backend.py @@ -8,6 +8,18 @@ from awx.main.notifications.custom_notification_base import CustomNotificationBa DEFAULT_MSG = CustomNotificationBase.DEFAULT_MSG DEFAULT_BODY = CustomNotificationBase.DEFAULT_BODY +DEFAULT_APPROVAL_RUNNING_MSG = CustomNotificationBase.DEFAULT_APPROVAL_RUNNING_MSG +DEFAULT_APPROVAL_RUNNING_BODY = CustomNotificationBase.DEFAULT_APPROVAL_RUNNING_BODY + +DEFAULT_APPROVAL_APPROVED_MSG = CustomNotificationBase.DEFAULT_APPROVAL_APPROVED_MSG +DEFAULT_APPROVAL_APPROVED_BODY = CustomNotificationBase.DEFAULT_APPROVAL_APPROVED_BODY + +DEFAULT_APPROVAL_TIMEOUT_MSG = CustomNotificationBase.DEFAULT_APPROVAL_TIMEOUT_MSG +DEFAULT_APPROVAL_TIMEOUT_BODY = CustomNotificationBase.DEFAULT_APPROVAL_TIMEOUT_BODY + +DEFAULT_APPROVAL_DENIED_MSG = CustomNotificationBase.DEFAULT_APPROVAL_DENIED_MSG +DEFAULT_APPROVAL_DENIED_BODY = CustomNotificationBase.DEFAULT_APPROVAL_DENIED_BODY + class CustomEmailBackend(EmailBackend, CustomNotificationBase): @@ -26,10 +38,10 @@ class CustomEmailBackend(EmailBackend, CustomNotificationBase): default_messages = {"started": {"message": DEFAULT_MSG, "body": DEFAULT_BODY}, "success": {"message": DEFAULT_MSG, "body": DEFAULT_BODY}, "error": {"message": DEFAULT_MSG, "body": DEFAULT_BODY}, - "workflow_approval": {"running": {"message": DEFAULT_MSG, "body": DEFAULT_BODY}, - "approved": {"message": DEFAULT_MSG, "body": DEFAULT_BODY}, - "timed_out": {"message": DEFAULT_MSG, "body": DEFAULT_BODY}, - "denied": {"message": DEFAULT_MSG, "body": DEFAULT_BODY}}} + "workflow_approval": {"running": {"message": DEFAULT_APPROVAL_RUNNING_MSG, "body": DEFAULT_APPROVAL_RUNNING_BODY}, + "approved": {"message": DEFAULT_APPROVAL_APPROVED_MSG, "body": DEFAULT_APPROVAL_APPROVED_BODY}, + "timed_out": {"message": DEFAULT_APPROVAL_TIMEOUT_MSG, "body": DEFAULT_APPROVAL_TIMEOUT_BODY}, + "denied": {"message": DEFAULT_APPROVAL_DENIED_MSG, "body": DEFAULT_APPROVAL_DENIED_BODY}}} def format_body(self, body): # leave body unchanged (expect a string) From 32f6f87463b5bad74a49bbe6a61466aafba2c6e4 Mon Sep 17 00:00:00 2001 From: beeankha Date: Wed, 4 Dec 2019 12:07:49 -0500 Subject: [PATCH 2/3] Change quotation mark format for sconsistency and also to comply with qa tests --- .../notifications/custom_notification_base.py | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/awx/main/notifications/custom_notification_base.py b/awx/main/notifications/custom_notification_base.py index d7a6ff898e..39e711540c 100644 --- a/awx/main/notifications/custom_notification_base.py +++ b/awx/main/notifications/custom_notification_base.py @@ -3,20 +3,21 @@ class CustomNotificationBase(object): - DEFAULT_MSG = "{{ job_friendly_name }} #{{ job.id }} '{{ job.name }}' {{ job.status }}: {{ url }}" - DEFAULT_BODY = "{{ job_friendly_name }} #{{ job.id }} had status {{ job.status }}, view details at {{ url }}\n\n{{ job_metadata }}" + DEFAULT_MSG = '{{ job_friendly_name }} #{{ job.id }} "{{ job.name }}" {{ job.status }}: {{ url }}' + DEFAULT_BODY = '{{ job_friendly_name }} #{{ job.id }} had status {{ job.status }}, view details at {{ url }}\n\n{{ job_metadata }}' - DEFAULT_APPROVAL_RUNNING_MSG = "The approval node '{{ approval_node_name }}' needs review. This node can be viewed at: {{ workflow_url }}" - DEFAULT_APPROVAL_RUNNING_BODY = "'{{ approval_node_name }}' needs review. This approval node can be viewed at: {{ workflow_url }}\n\n{{ job_metadata }}" + DEFAULT_APPROVAL_RUNNING_MSG = 'The approval node "{{ approval_node_name }}" needs review. This node can be viewed at: {{ workflow_url }}' + DEFAULT_APPROVAL_RUNNING_BODY = ('The approval node "{{ approval_node_name }}" needs review. ' + 'This approval node can be viewed at: {{ workflow_url }}\n\n{{ job_metadata }}') - DEFAULT_APPROVAL_APPROVED_MSG = "The approval node '{{ approval_node_name }}' was approved. {{ workflow_url }}" - DEFAULT_APPROVAL_APPROVED_BODY = "The approval node '{{ approval_node_name }}' was approved. {{ workflow_url }}\n\n{{ job_metadata }}" + DEFAULT_APPROVAL_APPROVED_MSG = 'The approval node "{{ approval_node_name }}" was approved. {{ workflow_url }}' + DEFAULT_APPROVAL_APPROVED_BODY = 'The approval node "{{ approval_node_name }}" was approved. {{ workflow_url }}\n\n{{ job_metadata }}' - DEFAULT_APPROVAL_TIMEOUT_MSG = "The approval node '{{ approval_node_name }}' has timed out. {{ workflow_url }}" - DEFAULT_APPROVAL_TIMEOUT_BODY = "The approval node '{{ approval_node_name }}' has timed out. {{ workflow_url }}\n\n{{ job_metadata }}" + DEFAULT_APPROVAL_TIMEOUT_MSG = 'The approval node "{{ approval_node_name }}" has timed out. {{ workflow_url }}' + DEFAULT_APPROVAL_TIMEOUT_BODY = 'The approval node "{{ approval_node_name }}" has timed out. {{ workflow_url }}\n\n{{ job_metadata }}' - DEFAULT_APPROVAL_DENIED_MSG = "The approval node '{{ approval_node_name }}' was denied. {{ workflow_url }}" - DEFAULT_APPROVAL_DENIED_BODY = "The approval node '{{ approval_node_name }}' was denied. {{ workflow_url }}\n\n{{ job_metadata }}" + DEFAULT_APPROVAL_DENIED_MSG = 'The approval node "{{ approval_node_name }}" was denied. {{ workflow_url }}' + DEFAULT_APPROVAL_DENIED_BODY = 'The approval node "{{ approval_node_name }}" was denied. {{ workflow_url }}\n\n{{ job_metadata }}' default_messages = {"started": {"message": DEFAULT_MSG, "body": None}, From 334c63388b888841ce9ef5d6629db6a7bdde5c05 Mon Sep 17 00:00:00 2001 From: beeankha Date: Wed, 4 Dec 2019 22:05:23 -0500 Subject: [PATCH 3/3] Revert original quotation mark configuration for non-approval default msg and body --- awx/main/notifications/custom_notification_base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/awx/main/notifications/custom_notification_base.py b/awx/main/notifications/custom_notification_base.py index 39e711540c..f8da2dab52 100644 --- a/awx/main/notifications/custom_notification_base.py +++ b/awx/main/notifications/custom_notification_base.py @@ -3,8 +3,8 @@ class CustomNotificationBase(object): - DEFAULT_MSG = '{{ job_friendly_name }} #{{ job.id }} "{{ job.name }}" {{ job.status }}: {{ url }}' - DEFAULT_BODY = '{{ job_friendly_name }} #{{ job.id }} had status {{ job.status }}, view details at {{ url }}\n\n{{ job_metadata }}' + DEFAULT_MSG = "{{ job_friendly_name }} #{{ job.id }} '{{ job.name }}' {{ job.status }}: {{ url }}" + DEFAULT_BODY = "{{ job_friendly_name }} #{{ job.id }} had status {{ job.status }}, view details at {{ url }}\n\n{{ job_metadata }}" DEFAULT_APPROVAL_RUNNING_MSG = 'The approval node "{{ approval_node_name }}" needs review. This node can be viewed at: {{ workflow_url }}' DEFAULT_APPROVAL_RUNNING_BODY = ('The approval node "{{ approval_node_name }}" needs review. '