Model and test updates for last_job and last_job_host_summary fields on Host.

This commit is contained in:
Chris Church 2013-05-11 02:10:17 -04:00
parent 8f2ea04b48
commit 6e6600b822
3 changed files with 38 additions and 0 deletions

View File

@ -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':

View File

@ -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

View File

@ -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)