From 9c047097190049d3adf2387a311e67972866c083 Mon Sep 17 00:00:00 2001 From: Ian Wienand Date: Mon, 11 May 2020 10:23:04 +1000 Subject: [PATCH] Revert "Revert "ensure-tox: use venv to install"" This reverts commit bac2bf6c45d6dc17590aa9508be998daa940f0b1. The problem was really that ensure-pip was giving us a "ensure_pip_virtualenv_command" that didn't work on some systems. Iaa3ecd05b64af6dd9b2ee17a39bcbe6cde8686ba fixes this underlying issue, so we can revert to the original change that uses that to install the tox environment. Change-Id: I8ce9dceb721474d3220f6e72409481dc89875ee0 --- 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, 24 insertions(+), 31 deletions(-) diff --git a/roles/ensure-tox/README.rst b/roles/ensure-tox/README.rst index b81aef3d1..937c0f847 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`` in the user -install directory (i.e., ``pip install --user``). +Look for ``tox``, and if not found, install it via ``pip`` into a +virtual environment for the current user. **Role Variables** diff --git a/roles/ensure-tox/defaults/main.yaml b/roles/ensure-tox/defaults/main.yaml index 2e2266d2b..7479455e6 100644 --- a/roles/ensure-tox/defaults/main.yaml +++ b/roles/ensure-tox/defaults/main.yaml @@ -1,2 +1,3 @@ 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 39b8402bb..8c8fa68e4 100644 --- a/roles/ensure-tox/tasks/main.yaml +++ b/roles/ensure-tox/tasks/main.yaml @@ -4,41 +4,33 @@ vars: ensure_pip_from_packages_with_python2: '{{ tox_prefer_python2 }}' -- name: Ensure tox is installed +- name: Check if tox is installed shell: | - 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 + command -v {{ tox_executable }} || exit 1 args: executable: /bin/bash - register: result - changed_when: "'Successfully installed' in result.stdout" + register: tox_preinstalled + failed_when: false -- name: Set tox_executable fact to pip installed +- name: Export preinstalled tox_exectuable set_fact: - tox_executable: "{{ ansible_user_dir }}/.local/bin/tox" + tox_executable: '{{ tox_executable }}' cacheable: true - when: result is changed + when: tox_preinstalled.rc == 0 -- name: Set tox_exectuable fact to found tox - set_fact: - tox_executable: "{{ tox_executable }}" - cacheable: true - when: result is not 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: Output tox version command: "{{ tox_executable }} --version" diff --git a/test-playbooks/ensure-tox.yaml b/test-playbooks/ensure-tox.yaml index 67a0001c1..854b37b39 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/bin/tox" + - tox_executable == "{{ ansible_user_dir }}/.local/tox/bin/tox" - name: Verify tox is installed command: "{{ tox_executable }} --version" register: result