summaryrefslogtreecommitdiff
path: root/setup.py
diff options
context:
space:
mode:
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,
+ },
)