summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandy <github@anarkystic.com>2010-07-26 23:16:49 +0200
committerandy <github@anarkystic.com>2010-07-26 23:16:49 +0200
commit6d3331e831ec147916d0d605958f61ca69eee9a8 (patch)
treeb4760974c2606fd4c764968ec707f04556094eb2
parenta766736b79f794f745438dd597f2aa529ad62ddc (diff)
downloadnova-6d3331e831ec147916d0d605958f61ca69eee9a8.tar.gz
Move virtualenv installation out of the makefile.
Also adds some tools for dealing with virtualenvs to the tools directory.
-rw-r--r--.bzrignore1
-rw-r--r--.gitignore1
-rw-r--r--Makefile28
-rw-r--r--tools/activate_venv.sh3
-rw-r--r--tools/install_venv.py95
-rw-r--r--tools/pip-requires3
-rwxr-xr-xtools/with_venv.sh4
7 files changed, 120 insertions, 15 deletions
diff --git a/.bzrignore b/.bzrignore
index 93fc868a3a..c3a502a1a4 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -1 +1,2 @@
run_tests.err.log
+.nova-venv
diff --git a/.gitignore b/.gitignore
index 9db87ac294..2afc7a32c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,4 @@ keys
build/*
build-stamp
nova.egg-info
+.nova-venv
diff --git a/Makefile b/Makefile
index da69f2b72d..5fb512610c 100644
--- a/Makefile
+++ b/Makefile
@@ -1,27 +1,27 @@
-venv=.venv
-with_venv=source $(venv)/bin/activate
-installed=$(venv)/lib/python2.6/site-packages
-twisted=$(installed)/twisted/__init__.py
+venv=.nova-venv
+with_venv=tools/with_venv.sh
+build:
+ # Nothing to do
-test: python-dependencies $(twisted)
- $(with_venv) && python run_tests.py
+test: $(venv)
+ $(with_venv) python run_tests.py
+
+test-system:
+ python run_tests.py
clean:
rm -rf _trial_temp
rm -rf keys
rm -rf instances
rm -rf networks
+ rm run_tests.err.log
clean-all: clean
rm -rf $(venv)
-python-dependencies: $(venv)
- pip install -q -E $(venv) -r tools/pip-requires
-
$(venv):
- pip install -q virtualenv
- virtualenv -q --no-site-packages $(venv)
-
-$(twisted):
- pip install -q -E $(venv) http://nova.openstack.org/Twisted-10.0.0Nova.tar.gz
+ @echo "You need to install the Nova virtualenv before you can run this."
+ @echo ""
+ @echo "Please run tools/install_venv.py"
+ @exit 1
diff --git a/tools/activate_venv.sh b/tools/activate_venv.sh
new file mode 100644
index 0000000000..d12cb34916
--- /dev/null
+++ b/tools/activate_venv.sh
@@ -0,0 +1,3 @@
+_TOOLS=`dirname $0`
+_VENV=$_TOOLS/../.nova-venv
+source $_VENV/bin/activate
diff --git a/tools/install_venv.py b/tools/install_venv.py
new file mode 100644
index 0000000000..720dcc0d93
--- /dev/null
+++ b/tools/install_venv.py
@@ -0,0 +1,95 @@
+"""
+Installation script for Nova's development virtualenv
+"""
+
+import os
+import subprocess
+import sys
+import textwrap
+
+
+ROOT = os.path.dirname(os.path.dirname(__file__))
+VENV = os.path.join(ROOT, '.nova-venv')
+PIP_REQUIRES = os.path.join(ROOT, 'tools', 'pip-requires')
+TWISTED_NOVA='http://nova.openstack.org/Twisted-10.0.0Nova.tar.gz'
+
+
+def die(message, *args):
+ print >>sys.stderr, message % args
+ sys.exit(1)
+
+
+def run_command(cmd, redirect_output=True, error_ok=False):
+ # Useful for debugging:
+ #print >>sys.stderr, ' '.join(cmd)
+ if redirect_output:
+ stdout = subprocess.PIPE
+ else:
+ stdout = None
+
+ proc = subprocess.Popen(cmd, stdout=stdout)
+ output = proc.communicate()[0]
+ if not error_ok and proc.returncode != 0:
+ die('Command "%s" failed.\n%s', ' '.join(cmd), output)
+ return output
+
+
+def check_dependencies():
+ """Make sure pip and virtualenv are on the path."""
+ print 'Checking for pip...',
+ if not run_command(['which', 'pip']).strip():
+ die('ERROR: pip not found.\n\nNova development requires pip,'
+ ' please install it using your favorite package management tool')
+ print 'done.'
+
+ print 'Checking for virtualenv...',
+ if not run_command(['which', 'virtualenv']).strip():
+ die('ERROR: virtualenv not found.\n\nNova development requires virtualenv,'
+ ' please install it using your favorite package management tool')
+ print 'done.'
+
+
+def create_virtualenv(venv=VENV):
+ print 'Creating venv...',
+ run_command(['virtualenv', '-q', '--no-site-packages', VENV])
+ print 'done.'
+
+
+def install_dependencies(venv=VENV):
+ print 'Installing dependencies with pip (this can take a while)...'
+ run_command(['pip', 'install', '-E', venv, '-r', PIP_REQUIRES],
+ redirect_output=False)
+ run_command(['pip', 'install', '-E', venv, TWISTED_NOVA],
+ redirect_output=False)
+
+
+def print_help():
+ help = """
+ Nova development environment setup is complete.
+
+ Nova development uses virtualenv to track and manage Python dependencies
+ while in development and testing.
+
+ To activate the Nova virtualenv for the extent of your current shell session
+ you can run:
+
+ $ source tools/activate_venv.sh
+
+ Or, if you prefer, you can run commands in the virtualenv on a case by case
+ basis by running:
+
+ $ tools/with_venv.sh <your command>
+
+ Also, run_tests.sh will automatically use the virtualenv.
+ """
+ print help
+
+
+def main(argv):
+ check_dependencies()
+ create_virtualenv()
+ install_dependencies()
+ print_help()
+
+if __name__ == '__main__':
+ main(sys.argv)
diff --git a/tools/pip-requires b/tools/pip-requires
index edb5fc01c5..4eb47ca2b0 100644
--- a/tools/pip-requires
+++ b/tools/pip-requires
@@ -5,10 +5,11 @@ anyjson==0.2.4
boto==2.0b1
carrot==0.10.5
lockfile==0.8
-mox==0.5.0
python-daemon==1.5.5
python-gflags==1.3
redis==2.0.0
tornado==1.0
wsgiref==0.1.2
zope.interface==3.6.1
+mox==0.5.0
+-f http://pymox.googlecode.com/files/mox-0.5.0.tar.gz
diff --git a/tools/with_venv.sh b/tools/with_venv.sh
new file mode 100755
index 0000000000..51468a3348
--- /dev/null
+++ b/tools/with_venv.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+TOOLS=`dirname $0`
+VENV=$TOOLS/../.nova-venv
+source $VENV/bin/activate && $@