From bac2bf6c45d6dc17590aa9508be998daa940f0b1 Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Fri, 8 May 2020 07:35:53 -0700 Subject: [PATCH] Revert "ensure-tox: use venv to install" This reverts commit 6d78fc4f900415b4e33db1653a8be64ee62a6ee6. In some environments, this error is being seen: 2020-05-07 18:36:02.139422 | debian-buster | "msg": "stdout: The virtual environment was not created successfully because ensurepip is not\navailable. On Debian/Ubuntu systems, you need to install the python3-venv\npackage using the following command.\n\n apt-get install python3-venv\n\nYou may need to use sudo with that command. After installing the python3-venv\npackage, recreate your virtual environment.\n\nFailing command: ['/home/zuul/.local/tox/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']\n\n" Change-Id: I6d38bf16cc38020c53815dfa6ab94f8cab4de0a2 --- roles/ensure-tox/README.rst | 4 +-- roles/ensure-tox/defaults/main.yaml | 1 - roles/ensure-tox/tasks/main.yaml | 48 +++++++++++++++++------------ test-playbooks/ensure-tox.yaml | 2 +- 4 files changed, 31 insertions(+), 24 deletions(-) diff --git a/roles/ensure-tox/README.rst b/roles/ensure-tox/README.rst index 937c0f847..b81aef3d1 100644 --- a/roles/ensure-tox/README.rst +++ b/roles/ensure-tox/README.rst @@ -1,7 +1,7 @@ Ensure tox is installed -Look for ``tox``, and if not found, install it via ``pip`` into a -virtual environment for the current user. +Look for ``tox``, and if not found, install it via ``pip`` in the user +install directory (i.e., ``pip install --user``). **Role Variables** diff --git a/roles/ensure-tox/defaults/main.yaml b/roles/ensure-tox/defaults/main.yaml index 7479455e6..2e2266d2b 100644 --- a/roles/ensure-tox/defaults/main.yaml +++ b/roles/ensure-tox/defaults/main.yaml @@ -1,3 +1,2 @@ tox_executable: tox -tox_venv_path: '{{ ansible_user_dir }}/.local/tox' tox_prefer_python2: false diff --git a/roles/ensure-tox/tasks/main.yaml b/roles/ensure-tox/tasks/main.yaml index 8c8fa68e4..39b8402bb 100644 --- a/roles/ensure-tox/tasks/main.yaml +++ b/roles/ensure-tox/tasks/main.yaml @@ -4,33 +4,41 @@ vars: ensure_pip_from_packages_with_python2: '{{ tox_prefer_python2 }}' -- name: Check if tox is installed +- name: Ensure tox is installed shell: | - command -v {{ tox_executable }} || exit 1 + set -euo pipefail + + {% if tox_prefer_python2 %} + if command -v pip; then + PIP=pip + elif command -v pip3; then + PIP=pip3 + fi + {% else %} + if command -v pip3; then + PIP=pip3 + elif command -v pip; then + PIP=pip + fi + {% endif %} + + type {{ tox_executable }} || $PIP install --user tox args: executable: /bin/bash - register: tox_preinstalled - failed_when: false + register: result + changed_when: "'Successfully installed' in result.stdout" -- name: Export preinstalled tox_exectuable +- name: Set tox_executable fact to pip installed set_fact: - tox_executable: '{{ tox_executable }}' + tox_executable: "{{ ansible_user_dir }}/.local/bin/tox" cacheable: true - when: tox_preinstalled.rc == 0 + when: result is changed -- name: Install tox to local env - when: tox_preinstalled.rc != 0 - block: - - name: Install tox to local venv - pip: - name: tox - virtualenv_command: '{{ ensure_pip_virtualenv_command }}' - virtualenv: '{{ tox_venv_path }}' - - - name: Export installed tox_executable path - set_fact: - tox_executable: '{{ tox_venv_path }}/bin/tox' - cacheable: true +- name: Set tox_exectuable fact to found tox + set_fact: + tox_executable: "{{ tox_executable }}" + cacheable: true + when: result is not changed - name: Output tox version command: "{{ tox_executable }} --version" diff --git a/test-playbooks/ensure-tox.yaml b/test-playbooks/ensure-tox.yaml index 854b37b39..67a0001c1 100644 --- a/test-playbooks/ensure-tox.yaml +++ b/test-playbooks/ensure-tox.yaml @@ -27,7 +27,7 @@ - name: Verify tox_executable is set assert: that: - - tox_executable == "{{ ansible_user_dir }}/.local/tox/bin/tox" + - tox_executable == "{{ ansible_user_dir }}/.local/bin/tox" - name: Verify tox is installed command: "{{ tox_executable }} --version" register: result