From 5e484b2503ebe0845ce9943890ecb214d5b5479a Mon Sep 17 00:00:00 2001 From: Chris Church Date: Sun, 11 May 2014 23:43:40 -0400 Subject: [PATCH] Update where host_name field is set on job events. --- .../management/commands/run_callback_receiver.py | 3 --- awx/main/models/jobs.py | 15 ++++++++++----- awx/main/tests/tasks.py | 1 + 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/awx/main/management/commands/run_callback_receiver.py b/awx/main/management/commands/run_callback_receiver.py index 55f39d5d4a..cd7cddea47 100644 --- a/awx/main/management/commands/run_callback_receiver.py +++ b/awx/main/management/commands/run_callback_receiver.py @@ -83,9 +83,6 @@ def process_job_event(data): for key in data.keys(): if key not in ('job_id', 'event', 'event_data', 'created'): data.pop(key) - data['play'] = data.get('event_data', {}).get('play', '').strip() - data['task'] = data.get('event_data', {}).get('task', '').strip() - data['host_name'] = data.get('event_data', {}).get('host', '').strip() for retry_count in xrange(11): try: if event == 'playbook_on_stats': diff --git a/awx/main/models/jobs.py b/awx/main/models/jobs.py index 929b5a2dc3..afdfbf658c 100644 --- a/awx/main/models/jobs.py +++ b/awx/main/models/jobs.py @@ -485,7 +485,9 @@ class JobEvent(CreatedModifiedModel): ) host_name = models.CharField( max_length=1024, - default='') + default='', + editable=False, + ) hosts = models.ManyToManyField( 'Host', related_name='job_events', @@ -652,13 +654,16 @@ class JobEvent(CreatedModifiedModel): self.role = self.event_data.get('role', '').strip() if 'role' not in update_fields: update_fields.append('role') + self.host_name = self.event_data.get('host', '').strip() + if 'host_name' not in update_fields: + update_fields.append('host_name') # Only update job event hierarchy and related models during post # processing (after running job). post_process = kwargs.pop('post_process', False) if post_process: try: - if not self.host_id and self.event_data.get('host', ''): - host_qs = Host.objects.filter(inventory__jobs__id=self.job_id, name=self.event_data['host']) + if not self.host_id and self.host_name: + host_qs = Host.objects.filter(inventory__jobs__id=self.job_id, name=self.host_name) self.host_id = host_qs.only('id').values_list('id', flat=True)[0] if 'host_id' not in update_fields: update_fields.append('host_id') @@ -695,8 +700,8 @@ class JobEvent(CreatedModifiedModel): from awx.main.models.inventory import Host extra_host_pks = set(extra_host_pks or []) hostnames = set() - if self.event_data.get('host', ''): - hostnames.add(self.event_data['host']) + if self.host_name: + hostnames.add(self.host_name) if self.event == 'playbook_on_stats': try: for v in self.event_data.values(): diff --git a/awx/main/tests/tasks.py b/awx/main/tests/tasks.py index d00d6f85b9..48f4ae49d4 100644 --- a/awx/main/tests/tasks.py +++ b/awx/main/tests/tasks.py @@ -419,6 +419,7 @@ class RunJobTest(BaseCeleryTest): self.assertEqual(evt.host, self.host) self.assertTrue(evt.play, evt) self.assertTrue(evt.task, evt) + self.assertTrue(evt.host_name) if has_roles: self.assertTrue(evt.role, evt) else: