mirror of
https://github.com/ansible/awx.git
synced 2026-01-11 10:00:01 -03:30
Added job event parent/child fields, update event display to show hierarchy levels.
This commit is contained in:
parent
c979817593
commit
232c4f2391
@ -1032,6 +1032,10 @@ class JobEvent(models.Model):
|
||||
def event_level(self):
|
||||
return self.LEVEL_FOR_EVENT.get(self.event, 0)
|
||||
|
||||
def get_event_display2(self):
|
||||
# FIXME: Remove extra spaces once hierarchy view is in place.
|
||||
return '%s%s' % (u'\u00a0\u00a0\u00a0\u00a0' * self.event_level, self.get_event_display())
|
||||
|
||||
def _find_parent(self):
|
||||
parent_events = set()
|
||||
if self.event in ('playbook_on_play_start', 'playbook_on_stats',
|
||||
@ -1061,6 +1065,7 @@ class JobEvent(models.Model):
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.failed = bool(self.event in self.FAILED_EVENTS)
|
||||
# FIXME: Propagage failed flag to parent events.
|
||||
try:
|
||||
if not self.host and self.event_data.get('host', ''):
|
||||
self.host = self.job.inventory.hosts.get(name=self.event_data['host'])
|
||||
|
||||
@ -302,7 +302,7 @@ class JobTemplateSerializer(BaseSerializer):
|
||||
model = JobTemplate
|
||||
fields = BASE_FIELDS + ('job_type', 'inventory', 'project', 'playbook',
|
||||
'credential', 'forks', 'limit', 'verbosity',
|
||||
'extra_vars', 'job_tags')
|
||||
'extra_vars', 'job_tags', 'host_config_key')
|
||||
|
||||
def get_related(self, obj):
|
||||
res = super(JobTemplateSerializer, self).get_related(obj)
|
||||
@ -393,18 +393,27 @@ class JobHostSummarySerializer(BaseSerializer):
|
||||
|
||||
class JobEventSerializer(BaseSerializer):
|
||||
|
||||
event_display = serializers.Field(source='get_event_display')
|
||||
event_display = serializers.Field(source='get_event_display2')
|
||||
|
||||
class Meta:
|
||||
model = JobEvent
|
||||
fields = ('id', 'url', 'created', 'job', 'event', 'event_display',
|
||||
'event_data', 'failed', 'host', 'related', 'summary_fields')
|
||||
'event_data', 'failed', 'host', 'related', 'summary_fields',
|
||||
'parent')
|
||||
|
||||
def get_related(self, obj):
|
||||
res = super(JobEventSerializer, self).get_related(obj)
|
||||
res.update(dict(
|
||||
job = reverse('main:job_detail', args=(obj.job.pk,)),
|
||||
#children = reverse('main:job_event_children_list', args=(obj.pk,)),
|
||||
))
|
||||
if obj.parent:
|
||||
res['parent'] = reverse('main:job_event_detail', args=(obj.parent.pk,))
|
||||
if obj.children.count():
|
||||
res['children'] = reverse('main:job_event_children_list', args=(obj.pk,))
|
||||
if obj.host:
|
||||
res['host'] = reverse('main:host_detail', args=(obj.host.pk,))
|
||||
if obj.hosts.count():
|
||||
# FIXME: Why are hosts not set for top level playbook events.
|
||||
res['hosts'] = reverse('main:job_event_hosts_list', args=(obj.pk,))
|
||||
return res
|
||||
|
||||
@ -192,7 +192,7 @@ class RunJob(Task):
|
||||
cwd = job.project.get_project_path()
|
||||
if not cwd:
|
||||
raise RuntimeError('project local_path %s cannot be found' %
|
||||
project.local_path)
|
||||
job.project.local_path)
|
||||
env = self.build_env(job, **kwargs)
|
||||
job = self.update_job(job_pk, job_args=args, job_cwd=cwd,
|
||||
job_env=env)
|
||||
|
||||
@ -108,6 +108,8 @@ job_host_summary_urls = patterns('ansibleworks.main.views',
|
||||
job_event_urls = patterns('ansibleworks.main.views',
|
||||
url(r'^$', 'job_event_list'),
|
||||
url(r'^(?P<pk>[0-9]+)/$', 'job_event_detail'),
|
||||
url(r'^(?P<pk>[0-9]+)/children/$', 'job_event_children_list'),
|
||||
url(r'^(?P<pk>[0-9]+)/hosts/$', 'job_event_hosts_list'),
|
||||
)
|
||||
|
||||
v1_urls = patterns('ansibleworks.main.views',
|
||||
|
||||
@ -1125,7 +1125,7 @@ class JobEventList(BaseList):
|
||||
permission_classes = (CustomRbac,)
|
||||
|
||||
def get_queryset(self):
|
||||
return self.model.objects.all() # FIXME
|
||||
return self.model.objects.distinct() # FIXME: Permissions?
|
||||
|
||||
class JobEventDetail(generics.RetrieveAPIView):
|
||||
|
||||
@ -1133,6 +1133,36 @@ class JobEventDetail(generics.RetrieveAPIView):
|
||||
serializer_class = JobEventSerializer
|
||||
permission_classes = (CustomRbac,)
|
||||
|
||||
class JobEventChildrenList(generics.ListAPIView):
|
||||
|
||||
model = JobEvent
|
||||
serializer_class = JobEventSerializer
|
||||
permission_classes = (CustomRbac,)
|
||||
parent_model = JobEvent
|
||||
relationship = 'children'
|
||||
|
||||
view_name = 'Job Event Children List'
|
||||
|
||||
def get_queryset(self):
|
||||
# FIXME: Verify read permission on the parent object and job.
|
||||
parent_obj = get_object_or_404(self.parent_model, pk=self.kwargs['pk'])
|
||||
return getattr(parent_obj, self.relationship)
|
||||
|
||||
class JobEventHostsList(generics.ListAPIView):
|
||||
|
||||
model = Host
|
||||
serializer_class = HostSerializer
|
||||
permission_classes = (CustomRbac,)
|
||||
parent_model = JobEvent
|
||||
relationship = 'hosts'
|
||||
|
||||
view_name = 'Job Event Hosts List'
|
||||
|
||||
def get_queryset(self):
|
||||
# FIXME: Verify read permission on the parent object and job.
|
||||
parent_obj = get_object_or_404(self.parent_model, pk=self.kwargs['pk'])
|
||||
return getattr(parent_obj, self.relationship)
|
||||
|
||||
class BaseJobEventsList(generics.ListAPIView):
|
||||
|
||||
model = JobEvent
|
||||
@ -1144,7 +1174,7 @@ class BaseJobEventsList(generics.ListAPIView):
|
||||
def get_queryset(self):
|
||||
# FIXME: Verify read permission on the parent object and job.
|
||||
parent_obj = get_object_or_404(self.parent_model, pk=self.kwargs['pk'])
|
||||
return getattr(parent_obj, self.relationship)
|
||||
return getattr(parent_obj, self.relationship).distinct()
|
||||
|
||||
class HostJobEventsList(BaseJobEventsList):
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user