mirror of
https://github.com/ansible/awx.git
synced 2026-04-09 20:19:21 -02:30
change up a few activity stream and approval drawer issues
This commit is contained in:
@@ -3441,6 +3441,17 @@ class WorkflowApprovalSerializer(UnifiedJobSerializer):
|
|||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
class WorkflowApprovalActivityStreamSerializer(WorkflowApprovalSerializer):
|
||||||
|
"""
|
||||||
|
timed_out and status are usually read-only fields
|
||||||
|
However, when we generate an activity stream record, we *want* to record
|
||||||
|
these types of changes. This serializer allows us to do so.
|
||||||
|
"""
|
||||||
|
status = serializers.ChoiceField(choices=JobTemplate.JOB_TEMPLATE_STATUS_CHOICES)
|
||||||
|
timed_out = serializers.BooleanField()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class WorkflowApprovalListSerializer(WorkflowApprovalSerializer, UnifiedJobListSerializer):
|
class WorkflowApprovalListSerializer(WorkflowApprovalSerializer, UnifiedJobListSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|||||||
@@ -681,38 +681,16 @@ class WorkflowApproval(UnifiedJob):
|
|||||||
return 'workflow_approval_template'
|
return 'workflow_approval_template'
|
||||||
|
|
||||||
def approve(self, request=None):
|
def approve(self, request=None):
|
||||||
from awx.main.signals import model_serializer_mapping # circular import
|
|
||||||
self.status = 'successful'
|
self.status = 'successful'
|
||||||
self.save()
|
self.save()
|
||||||
self.websocket_emit_status(self.status)
|
self.websocket_emit_status(self.status)
|
||||||
changes = model_to_dict(self, model_serializer_mapping())
|
|
||||||
changes['status'] = ['pending', 'successful']
|
|
||||||
activity_entry = ActivityStream(
|
|
||||||
operation='update',
|
|
||||||
object1='workflow_approval',
|
|
||||||
actor=request.user,
|
|
||||||
changes=json.dumps(changes),
|
|
||||||
)
|
|
||||||
activity_entry.save()
|
|
||||||
getattr(activity_entry, 'workflow_approval').add(self.pk)
|
|
||||||
schedule_task_manager()
|
schedule_task_manager()
|
||||||
return reverse('api:workflow_approval_approve', kwargs={'pk': self.pk}, request=request)
|
return reverse('api:workflow_approval_approve', kwargs={'pk': self.pk}, request=request)
|
||||||
|
|
||||||
def deny(self, request=None):
|
def deny(self, request=None):
|
||||||
from awx.main.signals import model_serializer_mapping # circular import
|
|
||||||
self.status = 'failed'
|
self.status = 'failed'
|
||||||
self.save()
|
self.save()
|
||||||
self.websocket_emit_status(self.status)
|
self.websocket_emit_status(self.status)
|
||||||
changes = model_to_dict(self, model_serializer_mapping())
|
|
||||||
changes['status'] = ['pending', 'failed']
|
|
||||||
activity_entry = ActivityStream(
|
|
||||||
operation='update',
|
|
||||||
object1='workflow_approval',
|
|
||||||
actor=request.user,
|
|
||||||
changes=json.dumps(changes),
|
|
||||||
)
|
|
||||||
activity_entry.save()
|
|
||||||
getattr(activity_entry, 'workflow_approval').add(self.pk)
|
|
||||||
schedule_task_manager()
|
schedule_task_manager()
|
||||||
return reverse('api:workflow_approval_deny', kwargs={'pk': self.pk}, request=request)
|
return reverse('api:workflow_approval_deny', kwargs={'pk': self.pk}, request=request)
|
||||||
|
|
||||||
|
|||||||
@@ -430,7 +430,7 @@ def model_serializer_mapping():
|
|||||||
models.Label: serializers.LabelSerializer,
|
models.Label: serializers.LabelSerializer,
|
||||||
models.WorkflowJobTemplate: serializers.WorkflowJobTemplateWithSpecSerializer,
|
models.WorkflowJobTemplate: serializers.WorkflowJobTemplateWithSpecSerializer,
|
||||||
models.WorkflowJobTemplateNode: serializers.WorkflowJobTemplateNodeSerializer,
|
models.WorkflowJobTemplateNode: serializers.WorkflowJobTemplateNodeSerializer,
|
||||||
models.WorkflowApproval: serializers.WorkflowApprovalSerializer,
|
models.WorkflowApproval: serializers.WorkflowApprovalActivityStreamSerializer,
|
||||||
models.WorkflowApprovalTemplate: serializers.WorkflowApprovalTemplateSerializer,
|
models.WorkflowApprovalTemplate: serializers.WorkflowApprovalTemplateSerializer,
|
||||||
models.WorkflowJob: serializers.WorkflowJobSerializer,
|
models.WorkflowJob: serializers.WorkflowJobSerializer,
|
||||||
models.OAuth2AccessToken: serializers.OAuth2TokenSerializer,
|
models.OAuth2AccessToken: serializers.OAuth2TokenSerializer,
|
||||||
|
|||||||
@@ -30,11 +30,19 @@
|
|||||||
<div class="at-Row-container">
|
<div class="at-Row-container">
|
||||||
<at-row-item
|
<at-row-item
|
||||||
header-value="{{ approval.summary_fields.source_workflow_job.name }}"
|
header-value="{{ approval.summary_fields.source_workflow_job.name }}"
|
||||||
header-state="workflowResults({id: {{approval.summary_fields.source_workflow_job.id}}})"
|
header-state="workflowResults({pid: {{approval.summary_fields.source_workflow_job.id}}})"
|
||||||
header-tag="{{:: vm.strings.get('approvals.WORKFLOW_TEMPLATE') }}">
|
header-tag="{{:: vm.strings.get('approvals.WORKFLOW_TEMPLATE') }}">
|
||||||
</at-row-item>
|
</at-row-item>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="at-Row-container--wrapped">
|
||||||
|
<at-row-item
|
||||||
|
value-bind-html="<b>Pause Node</b>">
|
||||||
|
</at-row-item>
|
||||||
|
<at-row-item
|
||||||
|
value-bind-html="{{ approval.name }}">
|
||||||
|
</at-row-item>
|
||||||
|
</div>
|
||||||
<div class="at-Row-container--wrapped">
|
<div class="at-Row-container--wrapped">
|
||||||
<at-row-item
|
<at-row-item
|
||||||
value-bind-html="{{ approval.created | longDate }}">
|
value-bind-html="{{ approval.created | longDate }}">
|
||||||
@@ -78,4 +86,4 @@
|
|||||||
hide-view-per-page="true">
|
hide-view-per-page="true">
|
||||||
</paginate>
|
</paginate>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ export default function BuildAnchor($log, $filter) {
|
|||||||
break;
|
break;
|
||||||
case 'workflow_approval':
|
case 'workflow_approval':
|
||||||
url += `workflows/${activity.summary_fields.workflow_job[0].id}`;
|
url += `workflows/${activity.summary_fields.workflow_job[0].id}`;
|
||||||
name = activity.summary_fields.workflow_job[0].name;
|
name = activity.summary_fields.workflow_job[0].name + ' | ' + activity.summary_fields.workflow_approval[0].name;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
url += resource + 's/' + obj.id + '/';
|
url += resource + 's/' + obj.id + '/';
|
||||||
|
|||||||
@@ -132,7 +132,13 @@ export default function BuildDescription(BuildAnchor, $log, i18n) {
|
|||||||
if (activity.changes.status[1] === 'successful') {
|
if (activity.changes.status[1] === 'successful') {
|
||||||
operationText = i18n._('approved');
|
operationText = i18n._('approved');
|
||||||
} else if (activity.changes.status[1] === 'failed') {
|
} else if (activity.changes.status[1] === 'failed') {
|
||||||
operationText = i18n._('denied');
|
if (activity.changes.timed_out && activity.changes.timed_out[1] === true) {
|
||||||
|
operationText = i18n._('timed out');
|
||||||
|
} else {
|
||||||
|
operationText = i18n._('denied');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
operationText = i18n._('updated');
|
||||||
}
|
}
|
||||||
activity.description = `${operationText} ${activity.object1} ${BuildAnchor(activity.summary_fields[activity.object1][0], activity.object1, activity)}`;
|
activity.description = `${operationText} ${activity.object1} ${BuildAnchor(activity.summary_fields[activity.object1][0], activity.object1, activity)}`;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user