diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 2bb25f3de2..2e70d2c8c9 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -3438,6 +3438,12 @@ class WorkflowJobTemplateSerializer(JobTemplateMixin, LabelsListMixin, UnifiedJo res['organization'] = self.reverse('api:organization_detail', kwargs={'pk': obj.organization.pk}) if obj.webhook_credential_id: res['webhook_credential'] = self.reverse('api:credential_detail', kwargs={'pk': obj.webhook_credential_id}) + if obj.inventory_id: + res['inventory'] = self.reverse( + 'api:inventory_detail', kwargs={ + 'pk': obj.inventory_id + } + ) return res def validate_extra_vars(self, value): diff --git a/awxkit/awxkit/api/pages/api.py b/awxkit/awxkit/api/pages/api.py index 664c0c18cf..a8759d1896 100644 --- a/awxkit/awxkit/api/pages/api.py +++ b/awxkit/awxkit/api/pages/api.py @@ -72,10 +72,21 @@ class ApiV2(base.Base): } for key in post_fields: - if key not in _page.related: - continue + if key in _page.related: + related = _page.related[key] + else: + if post_fields[key]['type'] == 'id' and _page.json.get(key) is not None: + log.warning("Related link %r missing from %s, attempting to reconstruct endpoint.", + key, _page.endpoint) + resource = getattr(self, key, None) + if resource is None: + log.error("Unable to infer endpoint for %r on %s.", key, _page.endpoint) + continue + related = self._filtered_list(resource, _page.json[key]).results[0] + else: + continue - rel_endpoint = self._cache.get_page(_page.related[key]) + rel_endpoint = self._cache.get_page(related) if rel_endpoint is None: # This foreign key is unreadable if post_fields[key].get('required'): log.error("Foreign key %r export failed for object %s.", key, _page.endpoint)