diff options
Diffstat (limited to 'setup.py')
-rwxr-xr-x | setup.py | 263 |
1 files changed, 151 insertions, 112 deletions
@@ -8,22 +8,19 @@ # Distutils magic for ec2-init -from glob import glob - import atexit import os +import platform import shutil +import subprocess import sys import tempfile -import platform +from distutils.errors import DistutilsArgError +from glob import glob import setuptools -from setuptools.command.install import install from setuptools.command.egg_info import egg_info - -from distutils.errors import DistutilsArgError - -import subprocess +from setuptools.command.install import install RENDERED_TMPD_PREFIX = "RENDERED_TEMPD" VARIANT = None @@ -34,20 +31,20 @@ def is_f(p): def is_generator(p): - return '-generator' in p + return "-generator" in p def pkg_config_read(library, var): fallbacks = { - 'systemd': { - 'systemdsystemconfdir': '/etc/systemd/system', - 'systemdsystemunitdir': '/lib/systemd/system', - 'systemdsystemgeneratordir': '/lib/systemd/system-generators', + "systemd": { + "systemdsystemconfdir": "/etc/systemd/system", + "systemdsystemunitdir": "/lib/systemd/system", + "systemdsystemgeneratordir": "/lib/systemd/system-generators", } } - cmd = ['pkg-config', '--variable=%s' % var, library] + cmd = ["pkg-config", "--variable=%s" % var, library] try: - path = subprocess.check_output(cmd).decode('utf-8') + path = subprocess.check_output(cmd).decode("utf-8") path = path.strip() except Exception: path = fallbacks[library][var] @@ -68,15 +65,15 @@ def in_virtualenv(): def get_version(): - cmd = [sys.executable, 'tools/read-version'] + cmd = [sys.executable, "tools/read-version"] ver = subprocess.check_output(cmd) - return ver.decode('utf-8').strip() + return ver.decode("utf-8").strip() def read_requires(): - cmd = [sys.executable, 'tools/read-dependencies'] + cmd = [sys.executable, "tools/read-dependencies"] deps = subprocess.check_output(cmd) - return deps.decode('utf-8').splitlines() + return deps.decode("utf-8").splitlines() def render_tmpl(template, mode=None): @@ -90,7 +87,7 @@ def render_tmpl(template, mode=None): # older versions of tox use bdist (xenial), and then install from there. # newer versions just use install. - if not (sys.argv[1] == 'install' or sys.argv[1].startswith('bdist*')): + if not (sys.argv[1] == "install" or sys.argv[1].startswith("bdist*")): return template tmpl_ext = ".tmpl" @@ -104,11 +101,20 @@ def render_tmpl(template, mode=None): bname = os.path.basename(template).rstrip(tmpl_ext) fpath = os.path.join(tmpd, bname) if VARIANT: - subprocess.run([sys.executable, './tools/render-cloudcfg', '--variant', - VARIANT, template, fpath]) + subprocess.run( + [ + sys.executable, + "./tools/render-cloudcfg", + "--variant", + VARIANT, + template, + fpath, + ] + ) else: subprocess.run( - [sys.executable, './tools/render-cloudcfg', template, fpath]) + [sys.executable, "./tools/render-cloudcfg", template, fpath] + ) if mode: os.chmod(fpath, mode) # return path relative to setup.py @@ -116,41 +122,48 @@ def render_tmpl(template, mode=None): # User can set the variant for template rendering -if '--distro' in sys.argv: - idx = sys.argv.index('--distro') - VARIANT = sys.argv[idx+1] - del sys.argv[idx+1] - sys.argv.remove('--distro') +if "--distro" in sys.argv: + idx = sys.argv.index("--distro") + VARIANT = sys.argv[idx + 1] + del sys.argv[idx + 1] + sys.argv.remove("--distro") INITSYS_FILES = { - 'sysvinit': [f for f in glob('sysvinit/redhat/*') if is_f(f)], - 'sysvinit_freebsd': [f for f in glob('sysvinit/freebsd/*') if is_f(f)], - 'sysvinit_netbsd': [f for f in glob('sysvinit/netbsd/*') if is_f(f)], - 'sysvinit_deb': [f for f in glob('sysvinit/debian/*') if is_f(f)], - 'sysvinit_openrc': [f for f in glob('sysvinit/gentoo/*') if is_f(f)], - 'sysvinit_suse': [f for f in glob('sysvinit/suse/*') if is_f(f)], - 'systemd': [render_tmpl(f) - for f in (glob('systemd/*.tmpl') + - glob('systemd/*.service') + - glob('systemd/*.socket') + - glob('systemd/*.target')) - if (is_f(f) and not is_generator(f))], - 'systemd.generators': [ + "sysvinit": [f for f in glob("sysvinit/redhat/*") if is_f(f)], + "sysvinit_freebsd": [f for f in glob("sysvinit/freebsd/*") if is_f(f)], + "sysvinit_netbsd": [f for f in glob("sysvinit/netbsd/*") if is_f(f)], + "sysvinit_deb": [f for f in glob("sysvinit/debian/*") if is_f(f)], + "sysvinit_openrc": [f for f in glob("sysvinit/gentoo/*") if is_f(f)], + "sysvinit_suse": [f for f in glob("sysvinit/suse/*") if is_f(f)], + "systemd": [ + render_tmpl(f) + for f in ( + glob("systemd/*.tmpl") + + glob("systemd/*.service") + + glob("systemd/*.socket") + + glob("systemd/*.target") + ) + if (is_f(f) and not is_generator(f)) + ], + "systemd.generators": [ render_tmpl(f, mode=0o755) - for f in glob('systemd/*') if is_f(f) and is_generator(f)], - 'upstart': [f for f in glob('upstart/*') if is_f(f)], + for f in glob("systemd/*") + if is_f(f) and is_generator(f) + ], + "upstart": [f for f in glob("upstart/*") if is_f(f)], } INITSYS_ROOTS = { - 'sysvinit': 'etc/rc.d/init.d', - 'sysvinit_freebsd': 'usr/local/etc/rc.d', - 'sysvinit_netbsd': 'usr/local/etc/rc.d', - 'sysvinit_deb': 'etc/init.d', - 'sysvinit_openrc': 'etc/init.d', - 'sysvinit_suse': 'etc/init.d', - 'systemd': pkg_config_read('systemd', 'systemdsystemunitdir'), - 'systemd.generators': pkg_config_read('systemd', - 'systemdsystemgeneratordir'), - 'upstart': 'etc/init/', + "sysvinit": "etc/rc.d/init.d", + "sysvinit_freebsd": "usr/local/etc/rc.d", + "sysvinit_netbsd": "usr/local/etc/rc.d", + "sysvinit_deb": "etc/init.d", + "sysvinit_openrc": "etc/init.d", + "sysvinit_suse": "etc/init.d", + "systemd": pkg_config_read("systemd", "systemdsystemunitdir"), + "systemd.generators": pkg_config_read( + "systemd", "systemdsystemgeneratordir" + ), + "upstart": "etc/init/", } INITSYS_TYPES = sorted([f.partition(".")[0] for f in INITSYS_ROOTS.keys()]) @@ -161,14 +174,14 @@ USR = "usr" ETC = "etc" USR_LIB_EXEC = "usr/lib" LIB = "lib" -if os.uname()[0] in ['FreeBSD', 'DragonFly']: +if os.uname()[0] in ["FreeBSD", "DragonFly"]: USR = "usr/local" USR_LIB_EXEC = "usr/local/lib" -elif os.path.isfile('/etc/redhat-release'): +elif os.path.isfile("/etc/redhat-release"): USR_LIB_EXEC = "usr/libexec" -elif os.path.isfile('/etc/system-release-cpe'): - with open('/etc/system-release-cpe') as f: - cpe_data = f.read().rstrip().split(':') +elif os.path.isfile("/etc/system-release-cpe"): + with open("/etc/system-release-cpe") as f: + cpe_data = f.read().rstrip().split(":") if cpe_data[1] == "\o": # noqa: W605 # URI formatted CPE @@ -176,7 +189,7 @@ elif os.path.isfile('/etc/system-release-cpe'): else: # String formatted CPE inc = 1 - (cpe_vendor, cpe_product, cpe_version) = cpe_data[2+inc:5+inc] + (cpe_vendor, cpe_product, cpe_version) = cpe_data[2 + inc : 5 + inc] if cpe_vendor == "amazon": USR_LIB_EXEC = "usr/libexec" @@ -187,16 +200,18 @@ class MyEggInfo(egg_info): def find_sources(self): ret = egg_info.find_sources(self) # update the self.filelist. - self.filelist.exclude_pattern(RENDERED_TMPD_PREFIX + ".*", - is_regex=True) + self.filelist.exclude_pattern( + RENDERED_TMPD_PREFIX + ".*", is_regex=True + ) # but since mfname is already written we have to update it also. mfname = os.path.join(self.egg_info, "SOURCES.txt") if os.path.exists(mfname): with open(mfname) as fp: - files = [f for f in fp - if not f.startswith(RENDERED_TMPD_PREFIX)] + files = [ + f for f in fp if not f.startswith(RENDERED_TMPD_PREFIX) + ] with open(mfname, "w") as fp: - fp.write(''.join(files)) + fp.write("".join(files)) return ret @@ -205,9 +220,12 @@ class InitsysInstallData(install): init_system = None user_options = install.user_options + [ # This will magically show up in member variable 'init_sys' - ('init-system=', None, - ('init system(s) to configure (%s) [default: None]' % - (", ".join(INITSYS_TYPES)))), + ( + "init-system=", + None, + "init system(s) to configure (%s) [default: None]" + % ", ".join(INITSYS_TYPES), + ), ] def initialize_options(self): @@ -220,26 +238,30 @@ class InitsysInstallData(install): if self.init_system and isinstance(self.init_system, str): self.init_system = self.init_system.split(",") - if (len(self.init_system) == 0 and - not platform.system().endswith('BSD')): - self.init_system = ['systemd'] + if len(self.init_system) == 0 and not platform.system().endswith( + "BSD" + ): + self.init_system = ["systemd"] bad = [f for f in self.init_system if f not in INITSYS_TYPES] if len(bad) != 0: raise DistutilsArgError( - "Invalid --init-system: %s" % (','.join(bad))) + "Invalid --init-system: %s" % ",".join(bad) + ) for system in self.init_system: # add data files for anything that starts with '<system>.' - datakeys = [k for k in INITSYS_ROOTS - if k.partition(".")[0] == system] + datakeys = [ + k for k in INITSYS_ROOTS if k.partition(".")[0] == system + ] for k in datakeys: if not INITSYS_FILES[k]: continue self.distribution.data_files.append( - (INITSYS_ROOTS[k], INITSYS_FILES[k])) + (INITSYS_ROOTS[k], INITSYS_FILES[k]) + ) # Force that command to reinitialize (with new file list) - self.distribution.reinitialize_command('install_data', True) + self.distribution.reinitialize_command("install_data", True) if not in_virtualenv(): @@ -251,58 +273,75 @@ if not in_virtualenv(): INITSYS_ROOTS[k] = "/" + INITSYS_ROOTS[k] data_files = [ - (ETC + '/cloud', [render_tmpl("config/cloud.cfg.tmpl")]), - (ETC + '/cloud/cloud.cfg.d', glob('config/cloud.cfg.d/*')), - (ETC + '/cloud/templates', glob('templates/*')), - (USR_LIB_EXEC + '/cloud-init', ['tools/ds-identify', - 'tools/hook-hotplug', - 'tools/uncloud-init', - 'tools/write-ssh-key-fingerprints']), - (USR + '/share/bash-completion/completions', - ['bash_completion/cloud-init']), - (USR + '/share/doc/cloud-init', [f for f in glob('doc/*') if is_f(f)]), - (USR + '/share/doc/cloud-init/examples', - [f for f in glob('doc/examples/*') if is_f(f)]), - (USR + '/share/doc/cloud-init/examples/seed', - [f for f in glob('doc/examples/seed/*') if is_f(f)]), + (ETC + "/cloud", [render_tmpl("config/cloud.cfg.tmpl")]), + (ETC + "/cloud/cloud.cfg.d", glob("config/cloud.cfg.d/*")), + (ETC + "/cloud/templates", glob("templates/*")), + ( + USR_LIB_EXEC + "/cloud-init", + [ + "tools/ds-identify", + "tools/hook-hotplug", + "tools/uncloud-init", + "tools/write-ssh-key-fingerprints", + ], + ), + ( + USR + "/share/bash-completion/completions", + ["bash_completion/cloud-init"], + ), + (USR + "/share/doc/cloud-init", [f for f in glob("doc/*") if is_f(f)]), + ( + USR + "/share/doc/cloud-init/examples", + [f for f in glob("doc/examples/*") if is_f(f)], + ), + ( + USR + "/share/doc/cloud-init/examples/seed", + [f for f in glob("doc/examples/seed/*") if is_f(f)], + ), ] -if not platform.system().endswith('BSD'): - data_files.extend([ - (ETC + '/NetworkManager/dispatcher.d/', - ['tools/hook-network-manager']), - (ETC + '/dhcp/dhclient-exit-hooks.d/', ['tools/hook-dhclient']), - (LIB + '/udev/rules.d', [f for f in glob('udev/*.rules')]), - (ETC + '/systemd/system/sshd-keygen@.service.d/', - ['systemd/disable-sshd-keygen-if-cloud-init-active.conf']), - ]) +if not platform.system().endswith("BSD"): + data_files.extend( + [ + ( + ETC + "/NetworkManager/dispatcher.d/", + ["tools/hook-network-manager"], + ), + (ETC + "/dhcp/dhclient-exit-hooks.d/", ["tools/hook-dhclient"]), + (LIB + "/udev/rules.d", [f for f in glob("udev/*.rules")]), + ( + ETC + "/systemd/system/sshd-keygen@.service.d/", + ["systemd/disable-sshd-keygen-if-cloud-init-active.conf"], + ), + ] + ) # Use a subclass for install that handles # adding on the right init system configuration files cmdclass = { - 'install': InitsysInstallData, - 'egg_info': MyEggInfo, + "install": InitsysInstallData, + "egg_info": MyEggInfo, } requirements = read_requires() setuptools.setup( - name='cloud-init', + name="cloud-init", version=get_version(), - description='Cloud instance initialisation magic', - author='Scott Moser', - author_email='scott.moser@canonical.com', - url='http://launchpad.net/cloud-init/', - packages=setuptools.find_packages(exclude=['tests.*', 'tests']), - scripts=['tools/cloud-init-per'], - license='Dual-licensed under GPLv3 or Apache 2.0', + description="Cloud instance initialisation magic", + author="Scott Moser", + author_email="scott.moser@canonical.com", + url="http://launchpad.net/cloud-init/", + packages=setuptools.find_packages(exclude=["tests.*", "tests"]), + scripts=["tools/cloud-init-per"], + license="Dual-licensed under GPLv3 or Apache 2.0", data_files=data_files, install_requires=requirements, cmdclass=cmdclass, entry_points={ - 'console_scripts': [ - 'cloud-init = cloudinit.cmd.main:main', - 'cloud-id = cloudinit.cmd.cloud_id:main' + "console_scripts": [ + "cloud-init = cloudinit.cmd.main:main", + "cloud-id = cloudinit.cmd.cloud_id:main", ], - } + }, ) |