diff --git a/awx/api/serializers.py b/awx/api/serializers.py index fa15c45e53..4aff55e926 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -1367,6 +1367,9 @@ class ExecutionEnvironmentSerializer(BaseSerializer): def get_related(self, obj): res = super(ExecutionEnvironmentSerializer, self).get_related(obj) + res.update( + activity_stream = self.reverse('api:execution_environment_activity_stream_list', kwargs={'pk': obj.pk}), + ) if obj.organization: res['organization'] = self.reverse('api:organization_detail', kwargs={'pk': obj.organization.pk}) if obj.credential: diff --git a/awx/api/urls/execution_environments.py b/awx/api/urls/execution_environments.py index 6e59f8fc45..e2310caec3 100644 --- a/awx/api/urls/execution_environments.py +++ b/awx/api/urls/execution_environments.py @@ -3,12 +3,14 @@ from django.conf.urls import url from awx.api.views import ( ExecutionEnvironmentList, ExecutionEnvironmentDetail, + ExecutionEnvironmentActivityStreamList, ) urls = [ url(r'^$', ExecutionEnvironmentList.as_view(), name='execution_environment_list'), url(r'^(?P[0-9]+)/$', ExecutionEnvironmentDetail.as_view(), name='execution_environment_detail'), + url(r'^(?P[0-9]+)/activity_stream/$', ExecutionEnvironmentActivityStreamList.as_view(), name='execution_environment_activity_stream_list'), ] __all__ = ['urls'] diff --git a/awx/api/views/__init__.py b/awx/api/views/__init__.py index 0bfa00d18c..4c4ec799fe 100644 --- a/awx/api/views/__init__.py +++ b/awx/api/views/__init__.py @@ -700,6 +700,22 @@ class ExecutionEnvironmentDetail(RetrieveUpdateDestroyAPIView): swagger_topic = "Execution Environments" +class ExecutionEnvironmentActivityStreamList(SubListAPIView): + + model = models.ActivityStream + serializer_class = serializers.ActivityStreamSerializer + parent_model = models.ExecutionEnvironment + relationship = 'activitystream_set' + search_fields = ('changes',) + + def get_queryset(self): + parent = self.get_parent_object() + self.check_parent_access(parent) + + qs = self.request.user.get_queryset(self.model) + return qs.filter(execution_environment=parent) + + class ProjectList(ListCreateAPIView): model = models.Project diff --git a/awx/main/models/__init__.py b/awx/main/models/__init__.py index 7e3209bd6d..52cabf3774 100644 --- a/awx/main/models/__init__.py +++ b/awx/main/models/__init__.py @@ -222,6 +222,7 @@ activity_stream_registrar.connect(CredentialType) activity_stream_registrar.connect(Team) activity_stream_registrar.connect(Project) #activity_stream_registrar.connect(ProjectUpdate) +activity_stream_registrar.connect(ExecutionEnvironment) activity_stream_registrar.connect(JobTemplate) activity_stream_registrar.connect(Job) activity_stream_registrar.connect(AdHocCommand) diff --git a/awx/main/signals.py b/awx/main/signals.py index 0a29fa9d6c..ac7a3d2301 100644 --- a/awx/main/signals.py +++ b/awx/main/signals.py @@ -368,6 +368,7 @@ def model_serializer_mapping(): models.Credential: serializers.CredentialSerializer, models.Team: serializers.TeamSerializer, models.Project: serializers.ProjectSerializer, + models.ExecutionEnvironment: serializers.ExecutionEnvironmentSerializer, models.JobTemplate: serializers.JobTemplateWithSpecSerializer, models.Job: serializers.JobSerializer, models.AdHocCommand: serializers.AdHocCommandSerializer,