mirror of
https://github.com/ansible/awx.git
synced 2026-02-21 21:20:08 -03:30
Merge pull request #7611 from ryanpetrello/host-recent-job-type
add job type to Host summary_fields.recent_jobs Reviewed-by: https://github.com/apps/softwarefactory-project-zuul
This commit is contained in:
@@ -1697,6 +1697,7 @@ class HostSerializer(BaseSerializerWithVariables):
|
|||||||
d.setdefault('recent_jobs', [{
|
d.setdefault('recent_jobs', [{
|
||||||
'id': j.job.id,
|
'id': j.job.id,
|
||||||
'name': j.job.job_template.name if j.job.job_template is not None else "",
|
'name': j.job.job_template.name if j.job.job_template is not None else "",
|
||||||
|
'type': j.job.job_type_name,
|
||||||
'status': j.job.status,
|
'status': j.job.status,
|
||||||
'finished': j.job.finished,
|
'finished': j.job.finished,
|
||||||
} for j in obj.job_host_summaries.select_related('job__job_template').order_by('-created')[:5]])
|
} for j in obj.job_host_summaries.select_related('job__job_template').order_by('-created')[:5]])
|
||||||
@@ -2841,7 +2842,7 @@ class JobTemplateMixin(object):
|
|||||||
return [{
|
return [{
|
||||||
'id': x.id, 'status': x.status, 'finished': x.finished, 'canceled_on': x.canceled_on,
|
'id': x.id, 'status': x.status, 'finished': x.finished, 'canceled_on': x.canceled_on,
|
||||||
# Make type consistent with API top-level key, for instance workflow_job
|
# Make type consistent with API top-level key, for instance workflow_job
|
||||||
'type': x.get_real_instance_class()._meta.verbose_name.replace(' ', '_')
|
'type': x.job_type_name
|
||||||
} for x in optimized_qs[:10]]
|
} for x in optimized_qs[:10]]
|
||||||
|
|
||||||
def get_summary_fields(self, obj):
|
def get_summary_fields(self, obj):
|
||||||
|
|||||||
@@ -962,6 +962,10 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique
|
|||||||
def event_class(self):
|
def event_class(self):
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def job_type_name(self):
|
||||||
|
return self.get_real_instance_class()._meta.verbose_name.replace(' ', '_')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def result_stdout_text(self):
|
def result_stdout_text(self):
|
||||||
related = UnifiedJobDeprecatedStdout.objects.get(pk=self.pk)
|
related = UnifiedJobDeprecatedStdout.objects.get(pk=self.pk)
|
||||||
@@ -1221,7 +1225,7 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique
|
|||||||
|
|
||||||
def websocket_emit_data(self):
|
def websocket_emit_data(self):
|
||||||
''' Return extra data that should be included when submitting data to the browser over the websocket connection '''
|
''' Return extra data that should be included when submitting data to the browser over the websocket connection '''
|
||||||
websocket_data = dict(type=self.get_real_instance_class()._meta.verbose_name.replace(' ', '_'))
|
websocket_data = dict(type=self.job_type_name)
|
||||||
if self.spawned_by_workflow:
|
if self.spawned_by_workflow:
|
||||||
websocket_data.update(dict(workflow_job_id=self.workflow_job_id,
|
websocket_data.update(dict(workflow_job_id=self.workflow_job_id,
|
||||||
workflow_node_id=self.workflow_node_id))
|
workflow_node_id=self.workflow_node_id))
|
||||||
|
|||||||
@@ -2,7 +2,9 @@ import pytest
|
|||||||
from unittest import mock
|
from unittest import mock
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from awx.main.models import Job, Instance, JobHostSummary
|
from awx.main.models import (Job, Instance, JobHostSummary, InventoryUpdate,
|
||||||
|
InventorySource, Project, ProjectUpdate,
|
||||||
|
SystemJob, AdHocCommand)
|
||||||
from awx.main.tasks import cluster_node_heartbeat
|
from awx.main.tasks import cluster_node_heartbeat
|
||||||
from django.test.utils import override_settings
|
from django.test.utils import override_settings
|
||||||
|
|
||||||
@@ -33,6 +35,31 @@ def test_job_capacity_and_with_inactive_node():
|
|||||||
assert i.capacity == 0
|
assert i.capacity == 0
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_job_type_name():
|
||||||
|
job = Job.objects.create()
|
||||||
|
assert job.job_type_name == 'job'
|
||||||
|
|
||||||
|
ahc = AdHocCommand.objects.create()
|
||||||
|
assert ahc.job_type_name == 'ad_hoc_command'
|
||||||
|
|
||||||
|
source = InventorySource.objects.create(source='ec2')
|
||||||
|
source.save()
|
||||||
|
iu = InventoryUpdate.objects.create(
|
||||||
|
inventory_source=source,
|
||||||
|
source='ec2'
|
||||||
|
)
|
||||||
|
assert iu.job_type_name == 'inventory_update'
|
||||||
|
|
||||||
|
proj = Project.objects.create()
|
||||||
|
proj.save()
|
||||||
|
pu = ProjectUpdate.objects.create(project=proj)
|
||||||
|
assert pu.job_type_name == 'project_update'
|
||||||
|
|
||||||
|
sjob = SystemJob.objects.create()
|
||||||
|
assert sjob.job_type_name == 'system_job'
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_job_notification_data(inventory, machine_credential, project):
|
def test_job_notification_data(inventory, machine_credential, project):
|
||||||
encrypted_str = "$encrypted$"
|
encrypted_str = "$encrypted$"
|
||||||
|
|||||||
Reference in New Issue
Block a user