diff --git a/awx/api/serializers.py b/awx/api/serializers.py index cdb334279c..d28545af6e 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -1867,6 +1867,15 @@ class CredentialTypeSerializer(BaseSerializer): raise serializers.ValidationError({"inputs": _("'ask_at_runtime' is not supported for custom credentials.")}) return super(CredentialTypeSerializer, self).validate(attrs) + def get_related(self, obj): + res = super(CredentialTypeSerializer, self).get_related(obj) + res['credentials'] = reverse( + 'api:credential_type_credential_list', + kwargs={'pk': obj.pk}, + request=self.context.get('request') + ) + return res + # TODO: remove when API v1 is removed @six.add_metaclass(BaseSerializerMetaclass) diff --git a/awx/api/urls.py b/awx/api/urls.py index d5e102082e..b065563e92 100644 --- a/awx/api/urls.py +++ b/awx/api/urls.py @@ -166,6 +166,7 @@ inventory_script_urls = patterns('awx.api.views', credential_type_urls = patterns('awx.api.views', url(r'^$', 'credential_type_list'), url(r'^(?P[0-9]+)/$', 'credential_type_detail'), + url(r'^(?P[0-9]+)/credentials/$', 'credential_type_credential_list'), ) credential_urls = patterns('awx.api.views', diff --git a/awx/api/views.py b/awx/api/views.py index c353bf5510..8160400ec4 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -1511,6 +1511,16 @@ class CredentialTypeDetail(RetrieveUpdateDestroyAPIView): return super(CredentialTypeDetail, self).destroy(request, *args, **kwargs) +class CredentialTypeCredentialList(SubListAPIView): + + model = Credential + parent_model = CredentialType + relationship = 'credentials' + serializer_class = CredentialSerializer + new_in_320 = True + new_in_api_v2 = True + + class CredentialList(ListCreateAPIView): model = Credential