mirror of
https://github.com/ansible/awx.git
synced 2026-01-10 15:32:07 -03:30
Enable the remaining top-level exportable resources
and rearrange the import/export methods a bit.
This commit is contained in:
parent
e0f6af4700
commit
01d575f833
@ -14,10 +14,10 @@ EXPORTABLE_RESOURCES = [
|
||||
'credential_types',
|
||||
'credentials',
|
||||
'notification_templates',
|
||||
# 'projects',
|
||||
# 'inventory',
|
||||
# 'job_templates',
|
||||
# 'workflow_job_templates',
|
||||
'projects',
|
||||
'inventory',
|
||||
'job_templates',
|
||||
'workflow_job_templates',
|
||||
]
|
||||
|
||||
|
||||
@ -89,9 +89,13 @@ page.register_page(resources.api, Api)
|
||||
|
||||
class ApiV2(base.Base):
|
||||
|
||||
# Common import/export methods
|
||||
|
||||
def _get_options(self, endpoint):
|
||||
return endpoint.options().json['actions']['POST']
|
||||
|
||||
# Export methods
|
||||
|
||||
def _serialize_asset(self, asset, options):
|
||||
# Drop any (credential_type) assets that are being managed by the Tower instance.
|
||||
if asset.json.get('managed_by_tower'):
|
||||
@ -143,6 +147,20 @@ class ApiV2(base.Base):
|
||||
assets = (self._serialize_asset(asset, options) for asset in results)
|
||||
return [asset for asset in assets if asset is not None]
|
||||
|
||||
def export_assets(self, **kwargs):
|
||||
# If no resource kwargs are explicitly used, export everything.
|
||||
all_resources = all(kwargs.get(resource) is None for resource in EXPORTABLE_RESOURCES)
|
||||
|
||||
data = {}
|
||||
for resource in EXPORTABLE_RESOURCES:
|
||||
value = kwargs.get(resource)
|
||||
if all_resources or value is not None:
|
||||
data[resource] = self._get_assets(resource, value)
|
||||
|
||||
return data
|
||||
|
||||
# Import methods
|
||||
|
||||
def _dependent_resources(self, data):
|
||||
page_resource = {getattr(self, resource)._create().__item_class__: resource
|
||||
for resource in self.json}
|
||||
@ -153,6 +171,8 @@ class ApiV2(base.Base):
|
||||
|
||||
def _register_page(self, page):
|
||||
natural_key = freeze(get_natural_key(page))
|
||||
# FIXME: we need to keep a reference for the case where we
|
||||
# don't have a natural key, so we can delete
|
||||
if natural_key is not None:
|
||||
if getattr(self, '_natural_key', None) is None:
|
||||
self._natural_key = {}
|
||||
@ -206,9 +226,6 @@ class ApiV2(base.Base):
|
||||
|
||||
self._register_page(page)
|
||||
|
||||
def _assign_related(self, page, name, related_set):
|
||||
pass # FIXME
|
||||
|
||||
def _assign_roles(self, page, roles):
|
||||
role_endpoint = page.json['related']['roles']
|
||||
for role in roles:
|
||||
@ -224,6 +241,9 @@ class ApiV2(base.Base):
|
||||
else:
|
||||
pass # admin role
|
||||
|
||||
def _assign_related(self, page, name, related_set):
|
||||
pass # FIXME
|
||||
|
||||
def _assign_related_assets(self, resource, assets):
|
||||
for asset in assets:
|
||||
page = self._get_by_natural_key(asset['natural_key'])
|
||||
@ -234,26 +254,14 @@ class ApiV2(base.Base):
|
||||
else:
|
||||
self._assign_related(page, name, S)
|
||||
|
||||
def export_assets(self, **kwargs):
|
||||
# If no resource kwargs are explicitly used, export everything.
|
||||
all_resources = all(kwargs.get(resource) is None for resource in EXPORTABLE_RESOURCES)
|
||||
|
||||
data = {}
|
||||
for resource in EXPORTABLE_RESOURCES:
|
||||
value = kwargs.get(resource)
|
||||
if all_resources or value is not None:
|
||||
data[resource] = self._get_assets(resource, value)
|
||||
|
||||
return data
|
||||
|
||||
def import_assets(self, data):
|
||||
for resource in self._dependent_resources(data):
|
||||
self._register_existing_assets(resource)
|
||||
self._create_assets(data, resource)
|
||||
# FIXME: should we delete existing unpatched assets?
|
||||
|
||||
# for resource, assets in data.items():
|
||||
# self._assign_related_assets(resource, assets)
|
||||
for resource, assets in data.items():
|
||||
self._assign_related_assets(resource, assets)
|
||||
|
||||
|
||||
page.register_page(resources.v2, ApiV2)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user