diff options
author | Scott Moser <smoser@ubuntu.com> | 2016-12-07 09:44:41 +0100 |
---|---|---|
committer | Scott Moser <smoser@brickies.net> | 2016-12-11 21:16:16 -0500 |
commit | c9c9197a3210ac24a039a4096214150d0e8cebb8 (patch) | |
tree | fd8108007e9bacce8cac114a39fa283ec6f5c733 /cloudinit/config | |
parent | a9d41de47a58d967ae3fd6a7749f8143a14424d3 (diff) | |
download | vyos-cloud-init-c9c9197a3210ac24a039a4096214150d0e8cebb8.tar.gz vyos-cloud-init-c9c9197a3210ac24a039a4096214150d0e8cebb8.zip |
mounts: use mount -a again to accomplish mounts
During recent changes to cc_mounts, on systemd systems, we started using
systemctl daemon-reload
rather than 'mount -a' to get mounts done.
The belief was that since entries in /etc/fstab would be written
to tell systemd that they should be after cloud-init
(x-systemd.requires=cloud-init.service) that the reload would then
let systemd mount the units as expected.
That doesn't seem to work, and new mount entries end up not getting
mounted. The change here moves back to using 'mount -a', but
then also does a systemctl daemon-reload.
LP: #1647708
Diffstat (limited to 'cloudinit/config')
-rw-r--r-- | cloudinit/config/cc_mounts.py | 52 |
1 files changed, 34 insertions, 18 deletions
diff --git a/cloudinit/config/cc_mounts.py b/cloudinit/config/cc_mounts.py index 452c9e83..0c796b18 100644 --- a/cloudinit/config/cc_mounts.py +++ b/cloudinit/config/cc_mounts.py @@ -327,6 +327,8 @@ def handle(_name, cfg, cloud, log, _args): if "mounts" in cfg: cfgmnt = cfg["mounts"] + LOG.debug("mounts configuration is %s", cfgmnt) + for i in range(len(cfgmnt)): # skip something that wasn't a list if not isinstance(cfgmnt[i], list): @@ -423,37 +425,51 @@ def handle(_name, cfg, cloud, log, _args): cc_lines.append('\t'.join(line)) fstab_lines = [] + removed = [] for line in util.load_file(FSTAB_PATH).splitlines(): try: toks = WS.split(line) if toks[3].find(comment) != -1: + removed.append(line) continue except Exception: pass fstab_lines.append(line) + for d in dirs: + try: + util.ensure_dir(d) + except Exception: + util.logexc(log, "Failed to make '%s' config-mount", d) + + sadds = [WS.sub(" ", n) for n in cc_lines] + sdrops = [WS.sub(" ", n) for n in removed] + + sops = (["- " + drop for drop in sdrops if drop not in sadds] + + ["+ " + add for add in sadds if add not in sdrops]) + fstab_lines.extend(cc_lines) contents = "%s\n" % ('\n'.join(fstab_lines)) util.write_file(FSTAB_PATH, contents) + activate_cmds = [] if needswap: - try: - util.subp(("swapon", "-a")) - except Exception: - util.logexc(log, "Activating swap via 'swapon -a' failed") + activate_cmds.append(["swapon", "-a"]) - for d in dirs: + if len(sops) == 0: + log.debug("No changes to /etc/fstab made.") + else: + log.debug("Changes to fstab: %s", sops) + activate_cmds.append(["mount", "-a"]) + if uses_systemd: + activate_cmds.append(["systemctl", "daemon-reload"]) + + fmt = "Activating swap and mounts with: %s" + for cmd in activate_cmds: + fmt = "Activate mounts: %s:" + ' '.join(cmd) try: - util.ensure_dir(d) - except Exception: - util.logexc(log, "Failed to make '%s' config-mount", d) - - activate_cmd = ["mount", "-a"] - if uses_systemd: - activate_cmd = ["systemctl", "daemon-reload"] - fmt = "Activate mounts: %s:" + ' '.join(activate_cmd) - try: - util.subp(activate_cmd) - LOG.debug(fmt, "PASS") - except util.ProcessExecutionError: - util.logexc(log, fmt, "FAIL") + util.subp(cmd) + log.debug(fmt, "PASS") + except util.ProcessExecutionError: + log.warn(fmt, "FAIL") + util.logexc(log, fmt, "FAIL") |