diff --git a/setup.py b/setup.py index c29a5e0ee..af7ca3058 100644 --- a/setup.py +++ b/setup.py @@ -6,9 +6,7 @@ import shutil import subprocess import sys -from setuptools import setup, find_packages -from setuptools.command.install import install -from setuptools.command.develop import develop +from setuptools import setup, find_packages, Command from packstack import version @@ -20,56 +18,51 @@ MODULES_REPO = ('https://github.com/redhat-openstack/' MODULES_BRANCH = 'master' -def install_modules(repo, branch, destination): - basedir = os.path.dirname(destination.rstrip(' /')) - repodir = os.path.basename(destination) - # install third-party modules from openstack-puppet-modules repo - if not os.path.exists(destination): - os.makedirs(basedir, 0755) +class InstallModulesCommand(Command): + description = 'install Puppet modules required to run Packstack' + user_options = [ + ('destination=', None, 'Directory where to install modules'), + ('branch=', None, 'Branch which should be used'), + ] - print 'Cloning %(repo)s to %(destination)s' % locals() - cmd = ('cd %(basedir)s; git clone %(repo)s %(repodir)s; ' - 'cd %(repodir)s; git checkout %(branch)s; ' - 'git submodule update --init' % locals()) - proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - out, err = proc.communicate() - if proc.returncode: - raise RuntimeError('Failed:\n%s' % err) - # install Packstack module - packstack_path = os.path.join(destination, 'packstack') - print 'Copying Packstack module to %(packstack_path)s' % locals() - source = os.path.join(os.path.dirname(__file__), - 'packstack/puppet/modules/packstack') - shutil.rmtree(packstack_path, ignore_errors=True) - shutil.copytree(source, packstack_path) + def initialize_options(self): + self.destination = None + self.branch = None + self.repo = MODULES_REPO + def finalize_options(self): + self.destination = self.destination or MODULES_DIR + self.branch = self.branch or MODULES_BRANCH -class WithModulesInstall(install): def run(self): - # Code below is from setuptools to make command work exactly - # as original - caller = sys._getframe(2) - caller_module = caller.f_globals.get('__name__', '') - caller_name = caller.f_code.co_name - if caller_module != 'distutils.dist' or caller_name != 'run_commands': - install.run(self) - else: - install.do_egg_install(self) - - # install Puppet modules if they don't exist - if hasattr(sys.stdout, 'isatty') and sys.stdout.isatty(): - install_modules(MODULES_REPO, MODULES_BRANCH, MODULES_DIR) - - -class WithModulesDevelop(develop): - def run(self): - # super doesn't work here because distutils.cmd.Command - # is old-style class - develop.run(self) - # install Puppet modules if they don't exist - if hasattr(sys.stdout, 'isatty') and sys.stdout.isatty(): - install_modules(MODULES_REPO, MODULES_BRANCH, MODULES_DIR) + destination = self.destination + basedir = os.path.dirname(self.destination.rstrip(' /')) + repodir = os.path.basename(self.destination.rstrip(' /')) + repo = self.repo + branch = self.branch + # install third-party modules from openstack-puppet-modules repo + if not os.path.exists(self.destination): + try: + os.makedirs(basedir, 0755) + except OSError: + # base directory exists + pass + print 'Cloning %(repo)s to %(destination)s' % locals() + cmd = ('cd %(basedir)s; git clone %(repo)s %(repodir)s; ' + 'cd %(repodir)s; git checkout %(branch)s; ' + 'git submodule update --init' % locals()) + proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + out, err = proc.communicate() + if proc.returncode: + raise RuntimeError('Failed:\n%s' % err) + # install Packstack module + packstack_path = os.path.join(self.destination, 'packstack') + print 'Copying Packstack module to %(packstack_path)s' % locals() + source = os.path.join(os.path.dirname(__file__), + 'packstack/puppet/modules/packstack') + shutil.rmtree(packstack_path, ignore_errors=True) + shutil.copytree(source, packstack_path) # Utility function to read the README file. @@ -81,8 +74,6 @@ def read(fname): setup( - cmdclass={'install': WithModulesInstall, 'develop': WithModulesDevelop}, - name="packstack", version=version.version_string(), author="Derek Higgins", @@ -102,4 +93,5 @@ setup( "License :: OSI Approved :: Apache Software License", ], scripts=["bin/packstack"], + cmdclass={'install_puppet_modules': InstallModulesCommand} )