summaryrefslogtreecommitdiff
path: root/cloudinit/config
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2016-12-07 09:44:41 +0100
committerScott Moser <smoser@brickies.net>2016-12-11 21:16:16 -0500
commitc9c9197a3210ac24a039a4096214150d0e8cebb8 (patch)
treefd8108007e9bacce8cac114a39fa283ec6f5c733 /cloudinit/config
parenta9d41de47a58d967ae3fd6a7749f8143a14424d3 (diff)
downloadvyos-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.py52
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")