Skip to content

Commit

Permalink
Fix lp bug 897882
Browse files Browse the repository at this point in the history
This moves the tree to having a standard setup.py.  For those who want to
build individual packages you'll need to use the setup_<package>.py files.

This allows us to support the traditional setup.py commands (i.e. sdist, etc)
that the openstack CI scripts will be using.

Change-Id: I7fe286d9973f43ae118a715276b0c089230f4f7e
  • Loading branch information
Brad Hall committed Jan 4, 2012
1 parent 5b23b5e commit f3a9665
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 170 deletions.
1 change: 1 addition & 0 deletions MANIFEST.in
@@ -1,3 +1,4 @@
include bin/*
include etc/*
include etc/init.d/*
include etc/quantum/plugins/openvswitch/*
Expand Down
252 changes: 84 additions & 168 deletions setup.py
@@ -1,169 +1,85 @@
from copy import deepcopy
from optparse import OptionParser
from os import path
import re
import sys

from tools import install_venv

ROOT = path.abspath(path.dirname(__file__))
CONFIG_PATH = path.abspath('/etc/quantum')
BASE_PACKAGES = ['common', 'server', 'client']
PLUGINS = ['sample_plugin', 'openvswitch_plugin', 'cisco_plugin']

RELATIVE = False


def clean_path(dirty):
"""Makes sure path delimiters are OS compliant"""
return path.join(*dirty.split('/'))


def script_dir():
global RELATIVE
script_dir = '/usr/sbin/'
if RELATIVE:
script_dir = 'usr/sbin/'
return script_dir


def etc_dir():
global RELATIVE
etc_dir = '/etc/'
if RELATIVE:
etc_dir = 'etc/'
return etc_dir


def create_parser():
"""Setup the option parser"""
usagestr = "Usage: %prog [OPTIONS] <command> [args]"
parser = OptionParser(usage=usagestr)
parser.add_option("-V", "--virtualenv", "--venv", dest="venv",
action="store_true", default=False, help="Install to a virtual-env")
parser.add_option("-U", "--user", dest="user", action="store_true",
default=False, help="Install to users's home")
options, args = parser.parse_args()

if args.__len__() is 0:
print usagestr
print "Commands:\ninstall\nuninstall\nbuild\nclean"
exit(0)

cmd = args[0]
args = args[1:]
return (options, cmd, args)


def install_packages(options, args=None):
"""Builds and installs packages"""
# Start building a command list
cmd = ['python']

# If no options, just a regular install. If venv, create, prepare and
# install in venv. If --user install in user's local dir. Usually
# ~/.local/
if options.venv:
if install_venv.VENV_EXISTS:
print "Virtual-env exists"
else:
install_venv.create_virtualenv(install_pip=False)
install_venv.install_dependencies()
cmd.insert(0, "tools/with_venv.sh")

# Install packages
# TODO(Tyler) allow users to pass in packages in cli
for package in BASE_PACKAGES + PLUGINS:
print "Installing %s" % package
# Each package needs its own command list, and it needs the path
# in the correct place (after "pip install")
pcmd = deepcopy(cmd)
pcmd.extend(["setup_%s.py" % package, "install"])

if options.venv:
pcmd.append("--root=%s" % install_venv.VENV)
try:
from setuptools import setup, find_packages
except ImportError:
from ez_setup import use_setuptools
use_setuptools()
from setuptools import setup, find_packages

if options.user:
pcmd.append('--user')

if package is 'client':
pcmd.append("--install-scripts=%s" % script_dir())

if package is 'server':
pcmd.append("--install-scripts=%s" % script_dir())
pcmd.append("--install-data=%s" % etc_dir())
print pcmd
install_venv.run_command(pcmd)
print "done."


def uninstall_packages(options, args=None):
"""Removes packages"""
cmd = ['pip', 'uninstall', '-y']

for package in ['quantum-' + x.split('/')[-1] \
for x in BASE_PACKAGES + PLUGINS]:
print "Uninstalling %s" % package
# Each package needs its own command list, and it needs the path
# in the correct place (after "pip uninstall"
pcmd = deepcopy(cmd)
pcmd.insert(2, package)
print pcmd
install_venv.run_command(pcmd)
print "done."


def build_packages(options, args=None):
"""Build RPM and/or deb packages"""
if not args:
print "To build packages you must specifiy either 'rpm', " \
"'deb', or 'all'"
exit(0)
if args[0] not in ['rpm', 'deb', 'all']:
raise Exception("Packge type must be rpm, deb, or all")

if 'rpm' in args or 'all' in args:
# Since we need to cd to build rpms, we call this sh script
cmd = ['tools/build_rpms.sh']
for package in BASE_PACKAGES + PLUGINS:
print "Building %s rpm" % package
pcmd = deepcopy(cmd)
pcmd.append(package)
install_venv.run_command(pcmd)
print "done."

if 'deb' in args or 'all' in args:
cmd = ['tools/build_debs.sh']
for p in BASE_PACKAGES + PLUGINS:
print "Building %s deb" % p
pcmd = deepcopy(cmd)
pcmd.append(p)
install_venv.run_command(pcmd)
print "done."


def clean_packages(options, args):
"""Cleans build packages"""
cmd = ["tools/clean.sh"]
install_venv.run_command(cmd)


def main():
"""Main Build script for Quantum"""
global RELATIVE
options, cmd, args = create_parser()

if options.user:
RELATIVE = True

print "Checking for virtual-env and easy_install"
install_venv.check_dependencies()

# Execute command
try:
globals()["%s_packages" % cmd](options, args)
except KeyError as exc:
print "Command %s' not found" % exc.__str__().split('_')[0]

if __name__ == "__main__":
main()
import sys
import version

Name = 'quantum'
Url = "https://launchpad.net/quantum"
Version = version.get_git_version()
License = 'Apache License 2.0'
Author = 'Netstack'
AuthorEmail = 'netstack@lists.launchpad.net'
Maintainer = ''
Summary = 'Quantum (virtual network service)'
ShortDescription = Summary
Description = Summary

requires = [
'eventlet>=0.9.12',
'Routes>=1.12.3',
'nose',
'Paste',
'PasteDeploy',
'pep8>=0.6.1',
'python-gflags',
'simplejson',
'sqlalchemy',
'webob',
'webtest'
]

EagerResources = [
'quantum',
]

ProjectScripts = [
]

config_path = 'etc/quantum/'
init_path = 'etc/init.d'
ovs_plugin_config_path = 'etc/quantum/plugins/openvswitch'
cisco_plugin_config_path = 'etc/quantum/plugins/cisco'

print "config_path: %s" % config_path
DataFiles = [
(config_path,
['etc/quantum.conf', 'etc/quantum.conf.test', 'etc/plugins.ini']),
(init_path, ['etc/init.d/quantum-server']),
(ovs_plugin_config_path,
['etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini']),
(cisco_plugin_config_path,
['etc/quantum/plugins/cisco/credentials.ini',
'etc/quantum/plugins/cisco/l2network_plugin.ini',
'etc/quantum/plugins/cisco/nexus.ini',
'etc/quantum/plugins/cisco/ucs.ini',
'etc/quantum/plugins/cisco/cisco_plugins.ini',
'etc/quantum/plugins/cisco/db_conn.ini']),
]

setup(
name=Name,
version=Version,
url=Url,
author=Author,
author_email=AuthorEmail,
description=ShortDescription,
long_description=Description,
license=License,
scripts=ProjectScripts,
install_requires=requires,
include_package_data=False,
packages=find_packages('.'),
data_files=DataFiles,
eager_resources=EagerResources,
entry_points={
'console_scripts': [
'quantum-server = quantum.server:main',
'quantum = quantum.client.cli:main',
]
},
)
2 changes: 0 additions & 2 deletions tools/build_rpms.sh

This file was deleted.

1 change: 1 addition & 0 deletions tools/pip-requires
Expand Up @@ -2,6 +2,7 @@ coverage
distribute>=0.6.24
eventlet>=0.9.12
Routes>=1.12.3
lxml==2.3
nose
nosexcover
Paste
Expand Down

0 comments on commit f3a9665

Please sign in to comment.