mirror of
https://github.com/ansible/awx.git
synced 2026-05-19 14:57:39 -02:30
Enable the export of several relation field types
This commit is contained in:
@@ -21,6 +21,15 @@ EXPORTABLE_RESOURCES = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
EXPORTABLE_RELATIONS = [
|
||||||
|
'Roles',
|
||||||
|
'NotificationTemplates',
|
||||||
|
'Labels',
|
||||||
|
'SurveySpec',
|
||||||
|
'WorkflowJobTemplateNodes',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
NATURAL_KEYS = {
|
NATURAL_KEYS = {
|
||||||
'user': ('username',),
|
'user': ('username',),
|
||||||
'organization': ('name',),
|
'organization': ('name',),
|
||||||
@@ -35,6 +44,9 @@ NATURAL_KEYS = {
|
|||||||
|
|
||||||
# related resources
|
# related resources
|
||||||
'role': ('name', ':content_object'),
|
'role': ('name', ':content_object'),
|
||||||
|
'notification_template': ('organization', 'name'),
|
||||||
|
'label': ('organization', 'name'), # FIXME: label will need to be fully constructed from this
|
||||||
|
'workflow_job_template_node': ('workflow_job_template', 'identifier'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -98,11 +110,18 @@ class ApiV2(base.Base):
|
|||||||
|
|
||||||
related = {}
|
related = {}
|
||||||
for k, related_endpoint in asset.related.items():
|
for k, related_endpoint in asset.related.items():
|
||||||
if k != 'roles':
|
if not related_endpoint:
|
||||||
|
continue
|
||||||
|
if k == 'object_roles':
|
||||||
|
continue
|
||||||
|
rel = related_endpoint._create()
|
||||||
|
if rel.__class__.__name__ not in EXPORTABLE_RELATIONS:
|
||||||
continue
|
continue
|
||||||
data = related_endpoint.get(all_pages=True)
|
data = related_endpoint.get(all_pages=True)
|
||||||
if 'results' in data:
|
if 'results' in data:
|
||||||
related[k] = [get_natural_key(x) for x in data.results]
|
related[k] = [get_natural_key(x) for x in data.results]
|
||||||
|
else:
|
||||||
|
related[k] = data.json
|
||||||
|
|
||||||
related_fields = {'related': related} if related else {}
|
related_fields = {'related': related} if related else {}
|
||||||
|
|
||||||
@@ -115,7 +134,7 @@ class ApiV2(base.Base):
|
|||||||
if value:
|
if value:
|
||||||
from awxkit.cli.options import pk_or_name
|
from awxkit.cli.options import pk_or_name
|
||||||
|
|
||||||
pk = pk_or_name(self, resource, value)
|
pk = pk_or_name(self, resource, value) # TODO: decide whether to support multiple
|
||||||
results = endpoint.get(id=pk).results
|
results = endpoint.get(id=pk).results
|
||||||
else:
|
else:
|
||||||
results = endpoint.get(all_pages=True).results
|
results = endpoint.get(all_pages=True).results
|
||||||
@@ -205,7 +224,7 @@ class ApiV2(base.Base):
|
|||||||
else:
|
else:
|
||||||
pass # admin role
|
pass # admin role
|
||||||
|
|
||||||
def assign_related_assets(self, resource, assets):
|
def _assign_related_assets(self, resource, assets):
|
||||||
for asset in assets:
|
for asset in assets:
|
||||||
page = self._get_by_natural_key(asset['natural_key'])
|
page = self._get_by_natural_key(asset['natural_key'])
|
||||||
# FIXME: deal with `page is None` case
|
# FIXME: deal with `page is None` case
|
||||||
@@ -234,7 +253,7 @@ class ApiV2(base.Base):
|
|||||||
# FIXME: should we delete existing unpatched assets?
|
# FIXME: should we delete existing unpatched assets?
|
||||||
|
|
||||||
# for resource, assets in data.items():
|
# for resource, assets in data.items():
|
||||||
# self.assign_related_assets(resource, assets)
|
# self._assign_related_assets(resource, assets)
|
||||||
|
|
||||||
|
|
||||||
page.register_page(resources.v2, ApiV2)
|
page.register_page(resources.v2, ApiV2)
|
||||||
|
|||||||
@@ -273,7 +273,7 @@ class Page(object):
|
|||||||
def get(self, all_pages=False, **query_parameters):
|
def get(self, all_pages=False, **query_parameters):
|
||||||
r = self.connection.get(self.endpoint, query_parameters)
|
r = self.connection.get(self.endpoint, query_parameters)
|
||||||
page = self.page_identity(r)
|
page = self.page_identity(r)
|
||||||
if all_pages and page.next:
|
if all_pages and getattr(page, 'next', None):
|
||||||
paged_results = [r.json()['results']]
|
paged_results = [r.json()['results']]
|
||||||
while page.next:
|
while page.next:
|
||||||
r = self.connection.get(self.next, query_parameters)
|
r = self.connection.get(self.next, query_parameters)
|
||||||
|
|||||||
Reference in New Issue
Block a user