summaryrefslogtreecommitdiff
path: root/setup.py
diff options
context:
space:
mode:
authorJoshua Harlow <harlowja@yahoo-inc.com>2012-07-03 16:04:58 -0700
committerJoshua Harlow <harlowja@yahoo-inc.com>2012-07-03 16:04:58 -0700
commitd0665e19efd69eee31344f1a1af212639dda0943 (patch)
treed1ffec27799d7b7309a9f94074dae30ee9d88ad4 /setup.py
parent21117bb5c26abcb42a7dcc5f318190e734c849bd (diff)
downloadvyos-cloud-init-d0665e19efd69eee31344f1a1af212639dda0943.tar.gz
vyos-cloud-init-d0665e19efd69eee31344f1a1af212639dda0943.zip
Add the ability to have setup.py have a CLI option that specifies the daemon type
which then later affects the installation of certain config files, which then can be extracted during package creation as needed.
Diffstat (limited to 'setup.py')
-rwxr-xr-xsetup.py72
1 files changed, 68 insertions, 4 deletions
diff --git a/setup.py b/setup.py
index d6253384..50e95e9d 100755
--- a/setup.py
+++ b/setup.py
@@ -26,10 +26,45 @@ import os
import re
import setuptools
+from setuptools.command.install import install
+
+from distutils.command.install_data import install_data
+from distutils.errors import DistutilsArgError
import subprocess
+def is_f(p):
+ return os.path.isfile(p)
+
+
+DAEMON_FILES = {
+ 'initd': filter((lambda x: is_f(x)
+ and x.find('local') == -1), glob('initd/*')),
+ 'initd-local': filter((lambda x: is_f(x)
+ and not x.endswith('cloud-init')), glob('initd/*')),
+ 'systemd': filter((lambda x: is_f(x)), glob('systemd/*')),
+ 'upstart': filter((lambda x: is_f(x)
+ and x.find('local') == -1
+ and x.find('nonet') == -1), glob('upstart/*')),
+ 'upstart-nonet': filter((lambda x: is_f(x)
+ and x.find('local') == -1
+ and not x.endswith('cloud-init.conf')), glob('upstart/*')),
+ 'upstart-local': filter((lambda x: is_f(x)
+ and x.find('nonet') == -1
+ and not x.endswith('cloud-init.conf')), glob('upstart/*')),
+}
+DAEMON_ROOTS = {
+ 'initd': '/etc/rc.d/init.d',
+ 'initd-local': '/etc/rc.d/init.d',
+ 'systemd': '/etc/systemd/system/',
+ 'upstart': '/etc/init/',
+ 'upstart-nonet': '/etc/init/',
+ 'upstart-local': '/etc/init/',
+}
+DAEMON_TYPES = sorted(list(DAEMON_ROOTS.keys()))
+
+
def tiny_p(cmd, capture=True):
# Darn python 2.6 doesn't have check_output (argggg)
stdout = subprocess.PIPE
@@ -46,10 +81,6 @@ def tiny_p(cmd, capture=True):
return (out, err)
-def is_f(p):
- return os.path.isfile(p)
-
-
def get_version():
cmd = ['tools/read-version']
(ver, _e) = tiny_p(cmd)
@@ -62,6 +93,34 @@ def read_requires():
return deps.splitlines()
+# TODO: Is there a better way to do this??
+class DaemonInstallData(install):
+ user_options = install.user_options + [
+ # This will magically show up in member variable 'daemon_type'
+ ('daemon-type=', None,
+ ('daemon type to configure (%s) [default: None]') %
+ (", ".join(DAEMON_TYPES))
+ ),
+ ]
+
+ def initialize_options(self):
+ install.initialize_options(self)
+ self.daemon_type = None
+
+ def finalize_options(self):
+ install.finalize_options(self)
+ if self.daemon_type and self.daemon_type not in DAEMON_TYPES:
+ raise DistutilsArgError(
+ ("You must specify one of (%s) when"
+ " specifying a daemon type!") % (", ".join(DAEMON_TYPES))
+ )
+ elif self.daemon_type:
+ self.distribution.data_files.append((DAEMON_ROOTS[self.daemon_type],
+ DAEMON_FILES[self.daemon_type]))
+ # Force that command to reinitalize (with new file list)
+ self.distribution.reinitialize_command('install_data', True)
+
+
setuptools.setup(name='cloud-init',
version=get_version(),
description='EC2 initialisation magic',
@@ -84,4 +143,9 @@ setuptools.setup(name='cloud-init',
('/usr/share/doc/cloud-init/examples/seed', filter(is_f, glob('doc/examples/seed/*'))),
],
install_requires=read_requires(),
+ cmdclass = {
+ # Use a subclass for install that handles
+ # adding on the right daemon configuration files
+ 'install': DaemonInstallData,
+ },
)