mirror of
https://github.com/ansible/awx.git
synced 2026-02-25 15:06:02 -03:30
Enable the remaining top-level exportable resources
and rearrange the import/export methods a bit.
This commit is contained in:
@@ -14,10 +14,10 @@ EXPORTABLE_RESOURCES = [
|
|||||||
'credential_types',
|
'credential_types',
|
||||||
'credentials',
|
'credentials',
|
||||||
'notification_templates',
|
'notification_templates',
|
||||||
# 'projects',
|
'projects',
|
||||||
# 'inventory',
|
'inventory',
|
||||||
# 'job_templates',
|
'job_templates',
|
||||||
# 'workflow_job_templates',
|
'workflow_job_templates',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@@ -89,9 +89,13 @@ page.register_page(resources.api, Api)
|
|||||||
|
|
||||||
class ApiV2(base.Base):
|
class ApiV2(base.Base):
|
||||||
|
|
||||||
|
# Common import/export methods
|
||||||
|
|
||||||
def _get_options(self, endpoint):
|
def _get_options(self, endpoint):
|
||||||
return endpoint.options().json['actions']['POST']
|
return endpoint.options().json['actions']['POST']
|
||||||
|
|
||||||
|
# Export methods
|
||||||
|
|
||||||
def _serialize_asset(self, asset, options):
|
def _serialize_asset(self, asset, options):
|
||||||
# Drop any (credential_type) assets that are being managed by the Tower instance.
|
# Drop any (credential_type) assets that are being managed by the Tower instance.
|
||||||
if asset.json.get('managed_by_tower'):
|
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)
|
assets = (self._serialize_asset(asset, options) for asset in results)
|
||||||
return [asset for asset in assets if asset is not None]
|
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):
|
def _dependent_resources(self, data):
|
||||||
page_resource = {getattr(self, resource)._create().__item_class__: resource
|
page_resource = {getattr(self, resource)._create().__item_class__: resource
|
||||||
for resource in self.json}
|
for resource in self.json}
|
||||||
@@ -153,6 +171,8 @@ class ApiV2(base.Base):
|
|||||||
|
|
||||||
def _register_page(self, page):
|
def _register_page(self, page):
|
||||||
natural_key = freeze(get_natural_key(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 natural_key is not None:
|
||||||
if getattr(self, '_natural_key', None) is None:
|
if getattr(self, '_natural_key', None) is None:
|
||||||
self._natural_key = {}
|
self._natural_key = {}
|
||||||
@@ -206,9 +226,6 @@ class ApiV2(base.Base):
|
|||||||
|
|
||||||
self._register_page(page)
|
self._register_page(page)
|
||||||
|
|
||||||
def _assign_related(self, page, name, related_set):
|
|
||||||
pass # FIXME
|
|
||||||
|
|
||||||
def _assign_roles(self, page, roles):
|
def _assign_roles(self, page, roles):
|
||||||
role_endpoint = page.json['related']['roles']
|
role_endpoint = page.json['related']['roles']
|
||||||
for role in roles:
|
for role in roles:
|
||||||
@@ -224,6 +241,9 @@ class ApiV2(base.Base):
|
|||||||
else:
|
else:
|
||||||
pass # admin role
|
pass # admin role
|
||||||
|
|
||||||
|
def _assign_related(self, page, name, related_set):
|
||||||
|
pass # FIXME
|
||||||
|
|
||||||
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'])
|
||||||
@@ -234,26 +254,14 @@ class ApiV2(base.Base):
|
|||||||
else:
|
else:
|
||||||
self._assign_related(page, name, S)
|
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):
|
def import_assets(self, data):
|
||||||
for resource in self._dependent_resources(data):
|
for resource in self._dependent_resources(data):
|
||||||
self._register_existing_assets(resource)
|
self._register_existing_assets(resource)
|
||||||
self._create_assets(data, resource)
|
self._create_assets(data, resource)
|
||||||
# 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)
|
||||||
|
|||||||
Reference in New Issue
Block a user