diff --git a/awx_collection/plugins/modules/export.py b/awx_collection/plugins/modules/export.py index 958c8e0d8d..dc4cd8332d 100644 --- a/awx_collection/plugins/modules/export.py +++ b/awx_collection/plugins/modules/export.py @@ -29,51 +29,51 @@ options: organizations: description: - organization names to export - type: str + type: list users: description: - user names to export - type: str + type: list teams: description: - team names to export - type: str + type: list credential_types: description: - credential type names to export - type: str + type: list credentials: description: - credential names to export - type: str + type: list execution_environments: description: - execution environment names to export - type: str + type: list notification_templates: description: - notification template names to export - type: str + type: list inventory_sources: description: - inventory soruces to export - type: str + type: list inventory: description: - inventory names to export - type: str + type: list projects: description: - project names to export - type: str + type: list job_templates: description: - job template names to export - type: str + type: list workflow_job_templates: description: - workflow names to export - type: str + type: list requirements: - "awxkit >= 9.3.0" notes: @@ -95,9 +95,9 @@ EXAMPLES = ''' job_templates: "My Template" credential: 'all' -- name: Export two or more inventories with a comma separated list of names +- name: Export a list of inventories export: - inventory: "My Inventory1,My Inventory2" + inventory: ['My Inventory 1', 'My Inventory 2'] ''' import logging @@ -115,24 +115,12 @@ except ImportError: def main(): argument_spec = dict( all=dict(type='bool', default=False), - credential_types=dict(type='str'), - credentials=dict(type='str'), - execution_environments=dict(type='str'), - inventory=dict(type='str'), - inventory_sources=dict(type='str'), - job_templates=dict(type='str'), - notification_templates=dict(type='str'), - organizations=dict(type='str'), - projects=dict(type='str'), - teams=dict(type='str'), - users=dict(type='str'), - workflow_job_templates=dict(type='str'), ) # We are not going to raise an error here because the __init__ method of ControllerAWXKitModule will do that for us if HAS_EXPORTABLE_RESOURCES: for resource in EXPORTABLE_RESOURCES: - argument_spec[resource] = dict(type='str') + argument_spec[resource] = dict(type='list') module = ControllerAWXKitModule(argument_spec=argument_spec) diff --git a/awxkit/awxkit/api/pages/api.py b/awxkit/awxkit/api/pages/api.py index c757efdf1f..c8aa36ad6b 100644 --- a/awxkit/awxkit/api/pages/api.py +++ b/awxkit/awxkit/api/pages/api.py @@ -213,13 +213,23 @@ class ApiV2(base.Base): assets = (self._export(asset, post_fields) for asset in endpoint.results) return [asset for asset in assets if asset is not None] + def _check_for_int(self, value): + return isinstance(value, int) or (isinstance(value, str) and value.isdecimal()) + def _filtered_list(self, endpoint, value): - if isinstance(value, int) or value.isdecimal(): + if isinstance(value, list) and len(value) == 1: + value = value[0] + if self._check_for_int(value): return endpoint.get(id=int(value)) + options = self._cache.get_options(endpoint) identifier = next(field for field in options['search_fields'] if field in ('name', 'username', 'hostname')) - if len(value.split(',')) > 0: - identifier += '__in' + if isinstance(value, list): + if all(self._check_for_int(item) for item in value): + identifier = 'or__id' + else: + identifier = 'or__' + identifier + return endpoint.get(**{identifier: value}, all_pages=True) def export_assets(self, **kwargs): diff --git a/awxkit/awxkit/cli/resource.py b/awxkit/awxkit/cli/resource.py index 27b6c623ee..f5f0428083 100644 --- a/awxkit/awxkit/cli/resource.py +++ b/awxkit/awxkit/cli/resource.py @@ -161,7 +161,7 @@ class Export(CustomCommand): # 1) the resource flag is not used at all, which will result in the attr being None # 2) the resource flag is used with no argument, which will result in the attr being '' # 3) the resource flag is used with an argument, and the attr will be that argument's value - resources.add_argument('--{}'.format(resource), nargs='?', const='') + resources.add_argument('--{}'.format(resource), nargs='*') def handle(self, client, parser): self.extend_parser(parser)