From 1ce5d7d539af59f50fc38332b533b641ae63f8da Mon Sep 17 00:00:00 2001 From: beeankha Date: Tue, 1 Sep 2020 11:35:37 -0400 Subject: [PATCH] Add ability to look up inventory sources by org name/ID --- .../plugins/modules/tower_inventory_source.py | 15 ++++++++++ .../modules/tower_inventory_source_update.py | 13 +++++++++ awx_collection/test/awx/test_completeness.py | 3 +- .../tasks/main.yml | 29 +++++++++++++++++-- 4 files changed, 56 insertions(+), 4 deletions(-) diff --git a/awx_collection/plugins/modules/tower_inventory_source.py b/awx_collection/plugins/modules/tower_inventory_source.py index 4755670291..bf52996211 100644 --- a/awx_collection/plugins/modules/tower_inventory_source.py +++ b/awx_collection/plugins/modules/tower_inventory_source.py @@ -128,6 +128,10 @@ options: - list of notifications to send on error type: list elements: str + organization: + description: + - Name of organization for project. + type: str extends_documentation_fragment: awx.awx.auth ''' @@ -140,6 +144,7 @@ EXAMPLES = ''' credential: previously-created-credential overwrite: True update_on_launch: True + organization: Default source_vars: private: false ''' @@ -168,6 +173,10 @@ def main(): enabled_value=dict(), host_filter=dict(), credential=dict(), + source_regions=dict(), + instance_filters=dict(), + group_by=dict(), + organization=dict(), overwrite=dict(type='bool'), overwrite_vars=dict(type='bool'), custom_virtualenv=dict(), @@ -195,6 +204,12 @@ def main(): source_project = module.params.get('source_project') state = module.params.get('state') + new_fields = {} + organization_id = None + organization = module.params.get('organization') + if organization: + organization_id = module.get_one_by_name_or_id('organizations', organization) + # Attempt to look up inventory source based on the provided name and inventory ID inventory_id = module.resolve_name_to_id('inventories', inventory) inventory_source = module.get_one('inventory_sources', **{ diff --git a/awx_collection/plugins/modules/tower_inventory_source_update.py b/awx_collection/plugins/modules/tower_inventory_source_update.py index 818011a0a3..f38e3b6039 100644 --- a/awx_collection/plugins/modules/tower_inventory_source_update.py +++ b/awx_collection/plugins/modules/tower_inventory_source_update.py @@ -32,6 +32,11 @@ options: - The name of the inventory source to update. required: True type: str + organization: + description: + - Name of organization for project. + type: str + required: False extends_documentation_fragment: awx.awx.auth ''' @@ -40,6 +45,7 @@ EXAMPLES = ''' tower_inventory_source_update: inventory: "My Inventory" inventory_source: "Example Inventory Source" + organization: Default - name: Update all inventory sources tower_inventory_source_update: @@ -69,6 +75,7 @@ def main(): argument_spec = dict( inventory=dict(required=True), inventory_source=dict(required=True), + organization=dict(), ) # Create a module for ourselves @@ -78,6 +85,12 @@ def main(): inventory = module.params.get('inventory') inventory_source = module.params.get('inventory_source') + new_fields = {} + organization_id = None + organization = module.params.get('organization') + if organization: + organization_id = module.get_one_by_name_or_id('organizations', organization) + # Attempt to look up the inventory the user specified (these will fail the module if not found) inventory_object = module.get_one_by_name_or_id('inventories', inventory) # Return all inventory sources related to the specified inventory diff --git a/awx_collection/test/awx/test_completeness.py b/awx_collection/test/awx/test_completeness.py index f656db63b3..ab8c1547f8 100644 --- a/awx_collection/test/awx/test_completeness.py +++ b/awx_collection/test/awx/test_completeness.py @@ -43,7 +43,8 @@ no_api_parameter_ok = { # /survey spec is now how we handle associations # We take an organization here to help with the lookups only 'tower_job_template': ['survey_spec', 'organization'], - # Organization is how we looking job templates + 'tower_inventory_source': ['organization'], + # Organization is how we are looking up job templates 'tower_workflow_job_template_node': ['organization'], # Survey is how we handle associations 'tower_workflow_job_template': ['survey'], diff --git a/awx_collection/tests/integration/targets/tower_inventory_source_update/tasks/main.yml b/awx_collection/tests/integration/targets/tower_inventory_source_update/tasks/main.yml index 2a5fb76d6b..7207541838 100644 --- a/awx_collection/tests/integration/targets/tower_inventory_source_update/tasks/main.yml +++ b/awx_collection/tests/integration/targets/tower_inventory_source_update/tasks/main.yml @@ -9,13 +9,20 @@ inv_name: "AWX-Collection-tests-tower_inventory_source_update-inv-{{ test_id }}" inv_source1: "AWX-Collection-tests-tower_inventory_source_update-source1-{{ test_id }}" inv_source2: "AWX-Collection-tests-tower_inventory_source_update-source2-{{ test_id }}" + org_name: "AWX-Collection-tests-tower_inventory_source_update-org-{{ test_id }}" - block: + + - name: "Create a new organization" + tower_organization: + name: "{{ org_name }}" + register: created_org + - name: Create a git project without credentials tower_project: name: "{{ project_name }}" - organization: Default + organization: "{{ org_name }}" scm_type: git scm_url: https://github.com/ansible/test-playbooks wait: true @@ -23,7 +30,14 @@ - name: Create an Inventory tower_inventory: name: "{{ inv_name }}" - organization: Default + organization: "{{ org_name }}" + state: present + register: created_inventory + + - name: Create another inventory w/ same name + tower_inventory: + name: "{{ inv_name }}" + organization: "{{ org_name }}" state: present register: created_inventory @@ -34,21 +48,24 @@ source_project: "{{ project_name }}" source_path: inventories/inventory.ini description: Source for Test inventory + organization: "{{ created_org.id }}" inventory: "{{ inv_name }}" - - name: Create Another Inventory Source + - name: Create Another Inventory Source (for testing org-based lookup) tower_inventory_source: name: "{{ inv_source2 }}" source: scm source_project: "{{ project_name }}" source_path: inventories/create_10_hosts.ini description: Source for Test inventory + organization: Default inventory: "{{ inv_name }}" - name: Test Inventory Source Update tower_inventory_source_update: inventory: "{{ inv_name }}" inventory_source: "{{ inv_source1 }}" + organization: Default register: result - assert: @@ -59,6 +76,7 @@ tower_inventory_source_update: inventory: "{{ inv_name }}" inventory_source: "{{ item }}" + organization: "{{ created_org.id }}" loop: "{{ query('awx.awx.tower_api', 'inventory_sources', query_params={ 'inventory': created_inventory.id }, return_ids=True ) }}" register: result @@ -78,3 +96,8 @@ name: "{{ project_name }}" organization: Default state: absent + + - name: "Remove the organization" + tower_organization: + name: "{{ org_name }}" + state: absent