From dd08b76fc92d83358b2eae0be014620e7feeb9a6 Mon Sep 17 00:00:00 2001 From: Pierre Riteau Date: Tue, 17 Jan 2017 03:42:38 +0000 Subject: [PATCH] Remove nova tarball from test-requirements Using test-requirements to get a specific version of nova for tests is preventing DevStack from installing blazar-nova, because nova is already added to upper-constraints.txt as "-e file:///opt/stack/nova#egg=nova". DevStack shows the following error message: Could not satisfy constraints for 'nova': installation from path or url cannot be constrained to a version Import tools/tox_install.sh from Neutron repos and adapt it to install Nova in tox environments used for unit tests. Minimal modifications were made to this script in order to easily track changes from Neutron repos. tox.ini is modified to use this script instead of pip. For pep8 checks, we exclude the .tmp directory where nova is cloned in gate jobs, otherwise the nova source is checked as well and triggers failures. See [1] and [2] for more details about the issue fixed by this commit. [1] https://bugs.launchpad.net/devstack/+bug/1540328/comments/13 [2] https://review.openstack.org/#/c/405630/1 Closes-Bug: #1641577 Change-Id: I542461e609866b21f597b0c4a2954807c5b8f8b7 --- test-requirements.txt | 1 - tools/tox_install.sh | 68 +++++++++++++++++++++++++++++++++++++++++++ tox.ini | 6 ++-- 3 files changed, 71 insertions(+), 4 deletions(-) create mode 100755 tools/tox_install.sh diff --git a/test-requirements.txt b/test-requirements.txt index 9ad1804..51dd9ef 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -15,5 +15,4 @@ testrepository>=0.0.18 # Apache-2.0/BSD testtools>=1.4.0 # MIT coverage>=4.0 # Apache-2.0 -http://tarballs.openstack.org/nova/nova-master.tar.gz#egg=nova oslotest>=1.10.0 # Apache-2.0 diff --git a/tools/tox_install.sh b/tools/tox_install.sh new file mode 100755 index 0000000..397d697 --- /dev/null +++ b/tools/tox_install.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +# The blazar-nova repo suffers from the problem of depending on nova, which +# does not exist on PyPI. + +# This wrapper for tox's package installer will use the existing package +# if it exists, else use zuul-cloner if that program exists, else grab it +# from nova master via a hard-coded URL. That last case should only +# happen with devs running unit tests locally. + +# From the tox.ini config page: +# install_command=ARGV +# default: +# pip install {opts} {packages} + +ZUUL_CLONER=/usr/zuul-env/bin/zuul-cloner +BRANCH_NAME=${NOVA_BRANCH:-master} +nova_installed=$(echo "import nova" | python 2>/dev/null ; echo $?) +NOVA_DIR=$HOME/nova + +set -e +set -x + +install_cmd="pip install -c$1" +shift + +# The devstack based functional tests have nova checked out in +# $NOVA_DIR on the test systems - with the change to test in it. +# Use this directory if it exists, so that this script installs the +# nova version to test here. +# Note that the functional tests use sudo to run tox and thus +# variables used for zuul-cloner to check out the correct version are +# lost. +if [ -d "$NOVA_DIR" ]; then + echo "FOUND Nova code at $NOVA_DIR - using" + $install_cmd -U -e $NOVA_DIR +elif [ $nova_installed -eq 0 ]; then + echo "ALREADY INSTALLED" > /tmp/tox_install.txt + location=$(python -c "import nova; print(nova.__file__)") + echo "ALREADY INSTALLED at $location" + + echo "Nova already installed; using existing package" +elif [ -x "$ZUUL_CLONER" ]; then + echo "ZUUL CLONER" > /tmp/tox_install.txt + # Make this relative to current working directory so that + # git clean can remove it. We cannot remove the directory directly + # since it is referenced after $install_cmd -e. + mkdir -p .tmp + NOVA_DIR=$(/bin/mktemp -d -p $(pwd)/.tmp) + pushd $NOVA_DIR + $ZUUL_CLONER --cache-dir \ + /opt/git \ + --branch $BRANCH_NAME \ + git://git.openstack.org \ + openstack/nova + cd openstack/nova + $install_cmd -e . + popd +else + echo "PIP HARDCODE" > /tmp/tox_install.txt + if [ -z "$NOVA_PIP_LOCATION" ]; then + NOVA_PIP_LOCATION="git+https://git.openstack.org/openstack/nova@$BRANCH_NAME#egg=nova" + fi + $install_cmd -U -e ${NOVA_PIP_LOCATION} +fi + +$install_cmd -U $* +exit $? diff --git a/tox.ini b/tox.ini index 10b49bc..8c55821 100644 --- a/tox.ini +++ b/tox.ini @@ -1,11 +1,11 @@ [tox] envlist = py35,py34,py27,pep8 -minversion = 1.6 +minversion = 2.0 skipsdist = True [testenv] usedevelop = True -install_command = pip install -U {opts} {packages} +install_command = {toxinidir}/tools/tox_install.sh {env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} {opts} {packages} deps = -r{toxinidir}/test-requirements.txt -r{toxinidir}/requirements.txt setenv = VIRTUAL_ENV={envdir} @@ -27,7 +27,7 @@ commands = {posargs} [flake8] show-source = true builtins = _ -exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,tools +exclude = .venv,.git,.tmp,.tox,dist,doc,*lib/python*,*egg,tools [hacking] import_exceptions = nova.openstack.common.gettextutils