From eb9083c447a6e1d84425ded5d4887e9ff5b250d6 Mon Sep 17 00:00:00 2001 From: Ryan Petrello Date: Fri, 15 Jun 2018 16:44:55 -0400 Subject: [PATCH] allow the bundled ansible virtualenv to be selected on JT/Proj see: https://github.com/ansible/awx/issues/34 --- awx/main/tests/unit/utils/test_common.py | 10 +++++++--- awx/main/utils/common.py | 2 +- .../organizations/add/organizations-add.controller.js | 5 ++++- .../edit/organizations-edit.controller.js | 5 ++++- awx/ui/client/src/organizations/organizations.form.js | 4 ++-- awx/ui/client/src/projects/projects.form.js | 4 ++-- .../src/templates/job_templates/job-template.form.js | 5 +++-- 7 files changed, 23 insertions(+), 12 deletions(-) diff --git a/awx/main/tests/unit/utils/test_common.py b/awx/main/tests/unit/utils/test_common.py index bb98b18bec..d000815cbe 100644 --- a/awx/main/tests/unit/utils/test_common.py +++ b/awx/main/tests/unit/utils/test_common.py @@ -173,11 +173,15 @@ def test_extract_ansible_vars(): def test_get_custom_venv_choices(): - assert common.get_custom_venv_choices() == [] + bundled_venv = os.path.join(settings.BASE_VENV_PATH, 'ansible', '') + assert common.get_custom_venv_choices() == [bundled_venv] - with TemporaryDirectory(dir=settings.BASE_VENV_PATH) as temp_dir: + with TemporaryDirectory(dir=settings.BASE_VENV_PATH, prefix='tmp') as temp_dir: os.makedirs(os.path.join(temp_dir, 'bin', 'activate')) - assert common.get_custom_venv_choices() == [os.path.join(temp_dir, '')] + assert sorted(common.get_custom_venv_choices()) == [ + bundled_venv, + os.path.join(temp_dir, '') + ] def test_region_sorting(): diff --git a/awx/main/utils/common.py b/awx/main/utils/common.py index 9cb134ff95..cf404a2625 100644 --- a/awx/main/utils/common.py +++ b/awx/main/utils/common.py @@ -928,7 +928,7 @@ def get_custom_venv_choices(): return [ os.path.join(custom_venv_path, x.decode('utf-8'), '') for x in os.listdir(custom_venv_path) - if x not in ('awx', 'ansible') and + if x != 'awx' and os.path.isdir(os.path.join(custom_venv_path, x)) and os.path.exists(os.path.join(custom_venv_path, x, 'bin', 'activate')) ] diff --git a/awx/ui/client/src/organizations/add/organizations-add.controller.js b/awx/ui/client/src/organizations/add/organizations-add.controller.js index 4b6e4a5e66..84a5f5dbd7 100644 --- a/awx/ui/client/src/organizations/add/organizations-add.controller.js +++ b/awx/ui/client/src/organizations/add/organizations-add.controller.js @@ -26,7 +26,10 @@ export default ['$scope', '$rootScope', '$location', '$stateParams', function init(){ // @issue What is this doing, why $scope.$emit("HideOrgListHeader"); - $scope.custom_virtualenvs_options = ConfigData.custom_virtualenvs; + $scope.custom_virtualenvs_visible = ConfigData.custom_virtualenvs.length > 1; + $scope.custom_virtualenvs_options = ConfigData.custom_virtualenvs.filter( + v => !/\/ansible\/$/.test(v) + ); CreateSelect2({ element: '#organization_custom_virtualenv', multiple: false, diff --git a/awx/ui/client/src/organizations/edit/organizations-edit.controller.js b/awx/ui/client/src/organizations/edit/organizations-edit.controller.js index e0f637efdf..6fcd6d55db 100644 --- a/awx/ui/client/src/organizations/edit/organizations-edit.controller.js +++ b/awx/ui/client/src/organizations/edit/organizations-edit.controller.js @@ -34,7 +34,10 @@ export default ['$scope', '$location', '$stateParams', 'OrgAdminLookup', $scope.$emit("HideOrgListHeader"); $scope.instance_groups = InstanceGroupsData; - $scope.custom_virtualenvs_options = ConfigData.custom_virtualenvs; + $scope.custom_virtualenvs_visible = ConfigData.custom_virtualenvs.length > 1; + $scope.custom_virtualenvs_options = ConfigData.custom_virtualenvs.filter( + v => !/\/ansible\/$/.test(v) + ); } diff --git a/awx/ui/client/src/organizations/organizations.form.js b/awx/ui/client/src/organizations/organizations.form.js index 79d8098afe..215650f95a 100644 --- a/awx/ui/client/src/organizations/organizations.form.js +++ b/awx/ui/client/src/organizations/organizations.form.js @@ -45,7 +45,7 @@ export default ['NotificationsList', 'i18n', }, custom_virtualenv: { label: i18n._('Ansible Environment'), - defaultText: i18n._('Default Environment'), + defaultText: i18n._('Use Default Environment'), type: 'select', ngOptions: 'venv for venv in custom_virtualenvs_options track by venv', awPopOver: "

" + i18n._("Select the custom Python virtual environment for this organization to run on.") + "

", @@ -53,7 +53,7 @@ export default ['NotificationsList', 'i18n', dataContainer: 'body', dataPlacement: 'right', ngDisabled: '!(organization_obj.summary_fields.user_capabilities.edit || canAdd)', - ngShow: 'custom_virtualenvs_options.length > 0' + ngShow: 'custom_virtualenvs_visible' } }, diff --git a/awx/ui/client/src/projects/projects.form.js b/awx/ui/client/src/projects/projects.form.js index ac97e7269f..9a0b467962 100644 --- a/awx/ui/client/src/projects/projects.form.js +++ b/awx/ui/client/src/projects/projects.form.js @@ -206,14 +206,14 @@ export default ['i18n', 'NotificationsList', 'TemplateList', custom_virtualenv: { label: i18n._('Ansible Environment'), type: 'select', - defaultText: i18n._('Default Environment'), + defaultText: i18n._('Use Default Environment'), ngOptions: 'venv for venv in custom_virtualenvs_options track by venv', awPopOver: "

" + i18n._("Select the custom Python virtual environment for this project to run on.") + "

", dataTitle: i18n._('Ansible Environment'), dataContainer: 'body', dataPlacement: 'right', ngDisabled: '!(project_obj.summary_fields.user_capabilities.edit || canAdd)', - ngShow: 'custom_virtualenvs_options.length > 0' + ngShow: 'custom_virtualenvs_options.length > 1' }, }, diff --git a/awx/ui/client/src/templates/job_templates/job-template.form.js b/awx/ui/client/src/templates/job_templates/job-template.form.js index bfc1073c7f..d87d3c603e 100644 --- a/awx/ui/client/src/templates/job_templates/job-template.form.js +++ b/awx/ui/client/src/templates/job_templates/job-template.form.js @@ -234,14 +234,15 @@ function(NotificationsList, i18n) { custom_virtualenv: { label: i18n._('Ansible Environment'), type: 'select', - defaultText: i18n._('Default Environment'), + defaultText: i18n._('Use Default Environment'), ngOptions: 'venv for venv in custom_virtualenvs_options track by venv', + awPopOver: "

" + i18n._("Select the custom Python virtual environment for this job template to run on.") + "

", dataTitle: i18n._('Ansible Environment'), dataContainer: 'body', dataPlacement: 'right', ngDisabled: '!(job_template_obj.summary_fields.user_capabilities.edit || canAdd)', - ngShow: 'custom_virtualenvs_options.length > 0' + ngShow: 'custom_virtualenvs_options.length > 1' }, instance_groups: { label: i18n._('Instance Groups'),