diff --git a/awx_collection/plugins/modules/tower_job_template.py b/awx_collection/plugins/modules/tower_job_template.py index c3105f313c..7cfd575000 100644 --- a/awx_collection/plugins/modules/tower_job_template.py +++ b/awx_collection/plugins/modules/tower_job_template.py @@ -191,6 +191,13 @@ options: description: - Maximum time in seconds to wait for a job to finish (server-side). type: int + custom_virtualenv: + version_added: "2.9" + description: + - Local absolute file path containing a custom Python virtualenv to use. + type: str + required: False + default: '' state: description: - Desired state of the resource. @@ -218,6 +225,7 @@ EXAMPLES = ''' tower_config_file: "~/tower_cli.cfg" survey_enabled: yes survey_spec: "{{ lookup('file', 'my_survey.json') }}" + custom_virtualenv: "/var/lib/awx/venv/custom-venv/" ''' from ..module_utils.ansible_tower import TowerModule, tower_auth_config, tower_check_mode @@ -298,6 +306,7 @@ def main(): playbook=dict(required=True), credential=dict(default=''), vault_credential=dict(default=''), + custom_virtualenv=dict(type='str', required=False, default=''), forks=dict(type='int'), limit=dict(default=''), verbosity=dict(type='int', choices=[0, 1, 2, 3, 4], default=0), diff --git a/awx_collection/plugins/modules/tower_organization.py b/awx_collection/plugins/modules/tower_organization.py index cfdbce711d..d9573f779f 100644 --- a/awx_collection/plugins/modules/tower_organization.py +++ b/awx_collection/plugins/modules/tower_organization.py @@ -32,6 +32,13 @@ options: description: - The description to use for the organization. type: str + custom_virtualenv: + version_added: "2.9" + description: + - Local absolute file path containing a custom Python virtualenv to use. + type: str + required: False + default: '' state: description: - Desired state of the resource. @@ -49,6 +56,14 @@ EXAMPLES = ''' description: "Foo bar organization" state: present tower_config_file: "~/tower_cli.cfg" + +- name: Create tower organization using 'foo-venv' as default Python virtualenv + tower_organization: + name: "Foo" + description: "Foo bar organization using foo-venv" + custom_virtualenv: "/var/lib/awx/venv/foo-venv/" + state: present + tower_config_file: "~/tower_cli.cfg" ''' from ..module_utils.ansible_tower import TowerModule, tower_auth_config, tower_check_mode @@ -66,6 +81,7 @@ def main(): argument_spec = dict( name=dict(required=True), description=dict(), + custom_virtualenv=dict(type='str', required=False, default=''), state=dict(choices=['present', 'absent'], default='present'), ) @@ -73,6 +89,7 @@ def main(): name = module.params.get('name') description = module.params.get('description') + custom_virtualenv = module.params.get('custom_virtualenv') state = module.params.get('state') json_output = {'organization': name, 'state': state} @@ -83,7 +100,7 @@ def main(): organization = tower_cli.get_resource('organization') try: if state == 'present': - result = organization.modify(name=name, description=description, create_on_missing=True) + result = organization.modify(name=name, description=description, custom_virtualenv=custom_virtualenv, create_on_missing=True) json_output['id'] = result['id'] elif state == 'absent': result = organization.delete(name=name) diff --git a/awx_collection/plugins/modules/tower_project.py b/awx_collection/plugins/modules/tower_project.py index 4c80b64889..2848e68138 100644 --- a/awx_collection/plugins/modules/tower_project.py +++ b/awx_collection/plugins/modules/tower_project.py @@ -87,6 +87,8 @@ options: description: - Local absolute file path containing a custom Python virtualenv to use type: str + required: False + default: '' organization: description: - Primary key of organization for project. @@ -156,7 +158,7 @@ def main(): scm_update_on_launch=dict(type='bool', default=False), scm_update_cache_timeout=dict(type='int'), job_timeout=dict(type='int', default=0), - custom_virtualenv=dict(), + custom_virtualenv=dict(type='str', required=False, default=''), local_path=dict(), state=dict(choices=['present', 'absent'], default='present'), wait=dict(type='bool', default=True),