diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 992805d180..cda572a4ee 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -3825,7 +3825,7 @@ class JobEventSerializer(BaseSerializer): model = JobEvent fields = ('*', '-name', '-description', 'job', 'event', 'counter', 'event_display', 'event_data', 'event_level', 'failed', - 'changed', 'uuid', 'parent_uuid', 'host', 'host_name', 'parent', + 'changed', 'uuid', 'parent_uuid', 'host', 'host_name', 'playbook', 'play', 'task', 'role', 'stdout', 'start_line', 'end_line', 'verbosity') @@ -3834,13 +3834,9 @@ class JobEventSerializer(BaseSerializer): res.update(dict( job = self.reverse('api:job_detail', kwargs={'pk': obj.job_id}), )) - if obj.parent_id: - res['parent'] = self.reverse('api:job_event_detail', kwargs={'pk': obj.parent_id}) res['children'] = self.reverse('api:job_event_children_list', kwargs={'pk': obj.pk}) if obj.host_id: res['host'] = self.reverse('api:host_detail', kwargs={'pk': obj.host_id}) - if obj.hosts.exists(): - res['hosts'] = self.reverse('api:job_event_hosts_list', kwargs={'pk': obj.pk}) return res def get_summary_fields(self, obj): diff --git a/awx/api/views/__init__.py b/awx/api/views/__init__.py index ddb5d5533e..59d0efd722 100644 --- a/awx/api/views/__init__.py +++ b/awx/api/views/__init__.py @@ -3814,6 +3814,12 @@ class JobEventHostsList(HostRelatedSearchMixin, SubListAPIView): relationship = 'hosts' name = _('Job Event Hosts List') + def get_queryset(self): + parent_event = self.get_parent_object() + self.check_parent_access(parent_event) + qs = self.request.user.get_queryset(self.model).filter(job_events_as_primary_host=parent_event) + return qs + class BaseJobEventsList(NoTruncateMixin, SubListAPIView): @@ -3836,8 +3842,7 @@ class HostJobEventsList(BaseJobEventsList): def get_queryset(self): parent_obj = self.get_parent_object() self.check_parent_access(parent_obj) - qs = self.request.user.get_queryset(self.model).filter( - Q(host=parent_obj) | Q(hosts=parent_obj)).distinct() + qs = self.request.user.get_queryset(self.model).filter(host=parent_obj) return qs @@ -3855,7 +3860,6 @@ class JobJobEventsList(BaseJobEventsList): self.check_parent_access(job) qs = job.job_events qs = qs.select_related('host') - qs = qs.prefetch_related('hosts', 'children') return qs.all() diff --git a/awx/main/access.py b/awx/main/access.py index 5dd8d7a925..336696c8c6 100644 --- a/awx/main/access.py +++ b/awx/main/access.py @@ -2238,7 +2238,7 @@ class JobEventAccess(BaseAccess): ''' model = JobEvent - prefetch_related = ('hosts', 'job__job_template', 'host',) + prefetch_related = ('job__job_template', 'host',) def filtered_queryset(self): return self.model.objects.filter( diff --git a/awx/main/migrations/0105_v370_remove_jobevent_parent_and_hosts.py b/awx/main/migrations/0105_v370_remove_jobevent_parent_and_hosts.py new file mode 100644 index 0000000000..a327667ba7 --- /dev/null +++ b/awx/main/migrations/0105_v370_remove_jobevent_parent_and_hosts.py @@ -0,0 +1,21 @@ +# Generated by Django 2.2.8 on 2020-01-15 18:01 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0104_v370_cleanup_old_scan_jts'), + ] + + operations = [ + migrations.RemoveField( + model_name='jobevent', + name='parent', + ), + migrations.RemoveField( + model_name='jobevent', + name='hosts', + ), + ] diff --git a/awx/main/models/events.py b/awx/main/models/events.py index f82ff5e422..bc51715e4b 100644 --- a/awx/main/models/events.py +++ b/awx/main/models/events.py @@ -450,19 +450,6 @@ class JobEvent(BasePlaybookEvent): default='', editable=False, ) - hosts = models.ManyToManyField( - 'Host', - related_name='job_events', - editable=False, - ) - parent = models.ForeignKey( - 'self', - related_name='children', - null=True, - default=None, - on_delete=models.SET_NULL, - editable=False, - ) parent_uuid = models.CharField( max_length=1024, default='',