mirror of
https://github.com/ansible/awx.git
synced 2026-01-23 15:38:06 -03:30
Model and test updates for last_job and last_job_host_summary fields on Host.
This commit is contained in:
parent
8f2ea04b48
commit
6e6600b822
@ -786,6 +786,21 @@ class JobHostSummary(models.Model):
|
||||
(self.host.name, self.changed, self.dark, self.failures, self.ok,
|
||||
self.processed, self.skipped)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(JobHostSummary, self).save(*args, **kwargs)
|
||||
self.update_host_last_job_summary()
|
||||
|
||||
def update_host_last_job_summary(self):
|
||||
update_fields = []
|
||||
if self.host.last_job != self.job:
|
||||
self.host.last_job = self.job
|
||||
update_fields.append('last_job')
|
||||
if self.host.last_job_host_summary != self:
|
||||
self.host.last_job_host_summary = self
|
||||
update_fields.append('last_job_host_summary')
|
||||
if update_fields:
|
||||
self.host.save(update_fields=update_fields)
|
||||
|
||||
class JobEvent(models.Model):
|
||||
'''
|
||||
An event/message logged from the callback when running a job.
|
||||
@ -866,6 +881,16 @@ class JobEvent(models.Model):
|
||||
self.failed = bool(self.event in self.FAILED_EVENTS)
|
||||
super(JobEvent, self).save(*args, **kwargs)
|
||||
self.update_host_summary_from_stats()
|
||||
self.update_host_last_job()
|
||||
|
||||
def update_host_last_job(self):
|
||||
if self.host:
|
||||
update_fields = []
|
||||
if self.host.last_job != self.job:
|
||||
self.host.last_job = self.job
|
||||
update_fields.append('last_job')
|
||||
if update_fields:
|
||||
self.host.save(update_fields=update_fields)
|
||||
|
||||
def update_host_summary_from_stats(self):
|
||||
if self.event != 'playbook_on_stats':
|
||||
|
||||
@ -220,6 +220,10 @@ class HostSerializer(BaseSerializer):
|
||||
inventory = reverse('main:inventory_detail', args=(obj.inventory.pk,)),
|
||||
job_events = reverse('main:host_job_event_list', args=(obj.pk,)),
|
||||
))
|
||||
if obj.last_job:
|
||||
res['last_job'] = reverse('main:job_detail', args=(obj.last_job.pk,))
|
||||
#if obj.last_job_host_summary:
|
||||
# res['last_job_host_summary'] = reverse('main:job_host_summary_detail', args=(obj.last_job_host_summary.pk,))
|
||||
# NICE TO HAVE: possible reverse resource to show what groups the host is in
|
||||
return res
|
||||
|
||||
|
||||
@ -231,6 +231,9 @@ class RunJobTest(BaseCeleryTest):
|
||||
self.assertEqual(job_events.filter(event='playbook_on_stats').count(), 1)
|
||||
for job_host_summary in job.job_host_summaries.all():
|
||||
unicode(job_host_summary) # For test coverage.
|
||||
self.assertEqual(job_host_summary.host.last_job_host_summary, job_host_summary)
|
||||
self.host = Host.objects.get(pk=self.host.pk)
|
||||
self.assertEqual(self.host.last_job, job)
|
||||
self.assertEqual(job.successful_hosts.count(), 1)
|
||||
self.assertEqual(job.failed_hosts.count(), 0)
|
||||
self.assertEqual(job.changed_hosts.count(), 1)
|
||||
@ -257,6 +260,8 @@ class RunJobTest(BaseCeleryTest):
|
||||
for evt in job_events.filter(event='runner_on_skipped'):
|
||||
self.assertEqual(evt.host, self.host)
|
||||
self.assertEqual(job_events.filter(event='playbook_on_stats').count(), 1)
|
||||
self.host = Host.objects.get(pk=self.host.pk)
|
||||
self.assertEqual(self.host.last_job, job)
|
||||
self.assertEqual(job.successful_hosts.count(), 0)
|
||||
self.assertEqual(job.failed_hosts.count(), 0)
|
||||
self.assertEqual(job.changed_hosts.count(), 0)
|
||||
@ -282,6 +287,8 @@ class RunJobTest(BaseCeleryTest):
|
||||
self.assertEqual(job_events.filter(event='runner_on_failed').count(), 1)
|
||||
self.assertEqual(job_events.get(event='runner_on_failed').host, self.host)
|
||||
self.assertEqual(job_events.filter(event='playbook_on_stats').count(), 1)
|
||||
self.host = Host.objects.get(pk=self.host.pk)
|
||||
self.assertEqual(self.host.last_job, job)
|
||||
self.assertEqual(job.successful_hosts.count(), 0)
|
||||
self.assertEqual(job.failed_hosts.count(), 1)
|
||||
self.assertEqual(job.changed_hosts.count(), 0)
|
||||
@ -309,6 +316,8 @@ class RunJobTest(BaseCeleryTest):
|
||||
self.assertEqual(job_events.filter(event='runner_on_skipped').count(), 1)
|
||||
self.assertEqual(job_events.get(event='runner_on_skipped').host, self.host)
|
||||
self.assertEqual(job_events.filter(event='playbook_on_stats').count(), 1)
|
||||
self.host = Host.objects.get(pk=self.host.pk)
|
||||
self.assertEqual(self.host.last_job, job)
|
||||
self.assertEqual(job.successful_hosts.count(), 0)
|
||||
self.assertEqual(job.failed_hosts.count(), 0)
|
||||
self.assertEqual(job.changed_hosts.count(), 0)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user