diff options
| -rw-r--r-- | cloudinit/config/cc_ubuntu_init_switch.py | 160 | ||||
| -rw-r--r-- | config/cloud.cfg.tmpl | 3 | ||||
| -rw-r--r-- | doc/rtd/topics/modules.rst | 1 | ||||
| -rwxr-xr-x | packages/bddeb | 3 | ||||
| -rw-r--r-- | packages/debian/dirs | 1 | ||||
| -rwxr-xr-x | packages/debian/rules.in | 2 | ||||
| -rwxr-xr-x | setup.py | 2 | ||||
| -rw-r--r-- | tests/cloud_tests/configs/modules/TODO.md | 2 | 
8 files changed, 4 insertions, 170 deletions
| diff --git a/cloudinit/config/cc_ubuntu_init_switch.py b/cloudinit/config/cc_ubuntu_init_switch.py deleted file mode 100644 index 5dd26901..00000000 --- a/cloudinit/config/cc_ubuntu_init_switch.py +++ /dev/null @@ -1,160 +0,0 @@ -# Copyright (C) 2014 Canonical Ltd. -# -# Author: Scott Moser <scott.moser@canonical.com> -# -# This file is part of cloud-init. See LICENSE file for license information. - -""" -Ubuntu Init Switch ------------------- -**Summary:** reboot system into another init. - -This module provides a way for the user to boot with systemd even if the image -is set to boot with upstart. It should be run as one of the first -``cloud_init_modules``, and will switch the init system and then issue a -reboot. The next boot will come up in the target init system and no action -will be taken. This should be inert on non-ubuntu systems, and also -exit quickly. - -.. note:: -    best effort is made, but it's possible this system will break, and probably -    won't interact well with any other mechanism you've used to switch the init -    system. - -**Internal name:** ``cc_ubuntu_init_switch`` - -**Module frequency:** once per instance - -**Supported distros:** ubuntu - -**Config keys**:: - -    init_switch: -      target: systemd (can be 'systemd' or 'upstart') -      reboot: true (reboot if a change was made, or false to not reboot) -""" - -from cloudinit.distros import ubuntu -from cloudinit import log as logging -from cloudinit.settings import PER_INSTANCE -from cloudinit import util - -import os -import time - -frequency = PER_INSTANCE -REBOOT_CMD = ["/sbin/reboot", "--force"] - -DEFAULT_CONFIG = { -    'init_switch': {'target': None, 'reboot': True} -} - -SWITCH_INIT = """ -#!/bin/sh -# switch_init: [upstart | systemd] - -is_systemd() { -   [ "$(dpkg-divert --listpackage /sbin/init)" = "systemd-sysv" ] -} -debug() { echo "$@" 1>&2; } -fail() { echo "$@" 1>&2; exit 1; } - -if [ "$1" = "systemd" ]; then -   if is_systemd; then -      debug "already systemd, nothing to do" -   else -      [ -f /lib/systemd/systemd ] || fail "no systemd available"; -      dpkg-divert --package systemd-sysv --divert /sbin/init.diverted \\ -          --rename /sbin/init -   fi -   [ -f /sbin/init ] || ln /lib/systemd/systemd /sbin/init -elif [ "$1" = "upstart" ]; then -   if is_systemd; then -      rm -f /sbin/init -      dpkg-divert --package systemd-sysv --rename --remove /sbin/init -   else -      debug "already upstart, nothing to do." -   fi -else -  fail "Error. expect 'upstart' or 'systemd'" -fi -""" - -distros = ['ubuntu'] - - -def handle(name, cfg, cloud, log, args): -    """Handler method activated by cloud-init.""" - -    if not isinstance(cloud.distro, ubuntu.Distro): -        log.debug("%s: distro is '%s', not ubuntu. returning", -                  name, cloud.distro.__class__) -        return - -    cfg = util.mergemanydict([cfg, DEFAULT_CONFIG]) -    target = cfg['init_switch']['target'] -    reboot = cfg['init_switch']['reboot'] - -    if len(args) != 0: -        target = args[0] -        if len(args) > 1: -            reboot = util.is_true(args[1]) - -    if not target: -        log.debug("%s: target=%s. nothing to do", name, target) -        return - -    if not util.which('dpkg'): -        log.warn("%s: 'dpkg' not available. Assuming not ubuntu", name) -        return - -    supported = ('upstart', 'systemd') -    if target not in supported: -        log.warn("%s: target set to %s, expected one of: %s", -                 name, target, str(supported)) - -    if os.path.exists("/run/systemd/system"): -        current = "systemd" -    else: -        current = "upstart" - -    if current == target: -        log.debug("%s: current = target = %s. nothing to do", name, target) -        return - -    try: -        util.subp(['sh', '-s', target], data=SWITCH_INIT) -    except util.ProcessExecutionError as e: -        log.warn("%s: Failed to switch to init '%s'. %s", name, target, e) -        return - -    if util.is_false(reboot): -        log.info("%s: switched '%s' to '%s'. reboot=false, not rebooting.", -                 name, current, target) -        return - -    try: -        log.warn("%s: switched '%s' to '%s'. rebooting.", -                 name, current, target) -        logging.flushLoggers(log) -        _fire_reboot(log, wait_attempts=4, initial_sleep=4) -    except Exception as e: -        util.logexc(log, "Requested reboot did not happen!") -        raise - - -def _fire_reboot(log, wait_attempts=6, initial_sleep=1, backoff=2): -    util.subp(REBOOT_CMD) -    start = time.time() -    wait_time = initial_sleep -    for _i in range(0, wait_attempts): -        time.sleep(wait_time) -        wait_time *= backoff -        elapsed = time.time() - start -        log.debug("Rebooted, but still running after %s seconds", int(elapsed)) -    # If we got here, not good -    elapsed = time.time() - start -    raise RuntimeError(("Reboot did not happen" -                        " after %s seconds!") % (int(elapsed))) - -# vi: ts=4 expandtab diff --git a/config/cloud.cfg.tmpl b/config/cloud.cfg.tmpl index f4b9069b..a537d65a 100644 --- a/config/cloud.cfg.tmpl +++ b/config/cloud.cfg.tmpl @@ -45,9 +45,6 @@ datasource_list: ['ConfigDrive', 'Azure', 'OpenStack', 'Ec2']  # The modules that run in the 'init' stage  cloud_init_modules:   - migrator -{% if variant in ["ubuntu", "unknown", "debian"] %} - - ubuntu-init-switch -{% endif %}   - seed_random   - bootcmd   - write-files diff --git a/doc/rtd/topics/modules.rst b/doc/rtd/topics/modules.rst index c963c09a..cdb0f419 100644 --- a/doc/rtd/topics/modules.rst +++ b/doc/rtd/topics/modules.rst @@ -50,7 +50,6 @@ Modules  .. automodule:: cloudinit.config.cc_ssh_authkey_fingerprints  .. automodule:: cloudinit.config.cc_ssh_import_id  .. automodule:: cloudinit.config.cc_timezone -.. automodule:: cloudinit.config.cc_ubuntu_init_switch  .. automodule:: cloudinit.config.cc_update_etc_hosts  .. automodule:: cloudinit.config.cc_update_hostname  .. automodule:: cloudinit.config.cc_users_groups diff --git a/packages/bddeb b/packages/bddeb index 609a94fb..7c123548 100755 --- a/packages/bddeb +++ b/packages/bddeb @@ -112,8 +112,7 @@ def get_parser():      parser.add_argument("--init-system", dest="init_system",                          help=("build deb with INIT_SYSTEM=xxx"                                " (default: %(default)s"), -                        default=os.environ.get("INIT_SYSTEM", -                                               "upstart,systemd")) +                        default=os.environ.get("INIT_SYSTEM", "systemd"))      parser.add_argument("--release", dest="release",                          help=("build with changelog referencing RELEASE"), diff --git a/packages/debian/dirs b/packages/debian/dirs index 9a633c60..1315cf8a 100644 --- a/packages/debian/dirs +++ b/packages/debian/dirs @@ -1,6 +1,5 @@  var/lib/cloud  usr/bin -etc/init  usr/share/doc/cloud  etc/cloud  lib/udev/rules.d diff --git a/packages/debian/rules.in b/packages/debian/rules.in index 053b7649..b87a5e84 100755 --- a/packages/debian/rules.in +++ b/packages/debian/rules.in @@ -1,6 +1,6 @@  ## template:basic  #!/usr/bin/make -f -INIT_SYSTEM ?= upstart,systemd +INIT_SYSTEM ?= systemd  export PYBUILD_INSTALL_ARGS=--init-system=$(INIT_SYSTEM)  PYVER ?= python${pyver} @@ -191,6 +191,8 @@ class InitsysInstallData(install):              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]))          # Force that command to reinitalize (with new file list) diff --git a/tests/cloud_tests/configs/modules/TODO.md b/tests/cloud_tests/configs/modules/TODO.md index d496da95..0b933b3b 100644 --- a/tests/cloud_tests/configs/modules/TODO.md +++ b/tests/cloud_tests/configs/modules/TODO.md @@ -89,8 +89,6 @@ Not applicable to write a test for this as it specifies when something should be  ## ssh authkey fingerprints  The authkey_hash key does not appear to work. In fact the default claims to be md5, however syslog only shows sha256 -## ubuntu init switch -  ## update etc hosts  2016-11-17: Issues with changing /etc/hosts and lxc backend. | 
