Files
packstack/setup.py
Martin Magr 65fcfc52d0 Use own command for modules
With this patch we will use separate command to install Puppet modules.
Subclassing setuptools commands breaks behaviour and IMHO it's impossible
to make it work both for build system and from-source-installations

Additional fix for rhbz#1063982

Change-Id: Id7eb1c8357339b44ebf72cbfed46265db0dfec33
2014-02-24 20:02:11 +01:00

98 lines
3.4 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import shutil
import subprocess
import sys
from setuptools import setup, find_packages, Command
from packstack import version
MODULES_DIR = os.environ.get('PACKSTACK_PUPPETDIR',
'/usr/share/openstack-puppet/modules')
MODULES_REPO = ('https://github.com/redhat-openstack/'
'openstack-puppet-modules.git')
MODULES_BRANCH = 'master'
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'),
]
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
def run(self):
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.
# Used for the long_description. It's nice, because now 1) we have a top level
# README file and 2) it's easier to type in the README file than to put a raw
# string in below ...
def read(fname):
return open(os.path.join(os.path.dirname(__file__), fname)).read()
setup(
name="packstack",
version=version.version_string(),
author="Derek Higgins",
author_email="derekh@redhat.com",
description=("A utility to install openstack"),
license="ASL 2.0",
keywords="openstack",
url="https://github.com/stackforge/packstack",
packages=find_packages('.'),
include_package_data=True,
long_description=read('README'),
zip_safe=False,
install_requires=['netaddr'],
classifiers=[
"Development Status :: 3 - Alpha",
"Topic :: Utilities",
"License :: OSI Approved :: Apache Software License",
],
scripts=["bin/packstack"],
cmdclass={'install_puppet_modules': InstallModulesCommand}
)