summaryrefslogtreecommitdiff
path: root/cloudinit
diff options
context:
space:
mode:
authorEduardo Otubo <otubo@redhat.com>2020-08-18 23:12:02 +0200
committerGitHub <noreply@github.com>2020-08-18 15:12:02 -0600
commitb749548a9eb43b34cce64f8688107645411abc8c (patch)
tree9e8d5c68d9c027f4d6008cd3c755cafda913887b /cloudinit
parenta4b6b96f30bdd994ab535b222cf4b4bf09f20668 (diff)
downloadcloud-init-git-b749548a9eb43b34cce64f8688107645411abc8c.tar.gz
Detect kernel version before swap file creation (#428)
According to man page `man 8 swapon', "Preallocated swap files are supported on XFS since Linux 4.18". This patch checks for kernel version before attepting to create swapfile, using dd for XFS only on kernel versions <= 4.18 or btrfs. Add new func util.kernel_version which returns a tuple of ints (major, minor) Signed-off-by: Eduardo Otubo otubo@redhat.com
Diffstat (limited to 'cloudinit')
-rw-r--r--cloudinit/config/cc_mounts.py8
-rw-r--r--cloudinit/util.py4
2 files changed, 9 insertions, 3 deletions
diff --git a/cloudinit/config/cc_mounts.py b/cloudinit/config/cc_mounts.py
index 773b8285..54f2f878 100644
--- a/cloudinit/config/cc_mounts.py
+++ b/cloudinit/config/cc_mounts.py
@@ -65,7 +65,7 @@ swap file is created.
from string import whitespace
import logging
-import os.path
+import os
import re
from cloudinit import type_utils
@@ -263,7 +263,8 @@ def create_swapfile(fname: str, size: str) -> None:
fstype = util.get_mount_info(swap_dir)[1]
- if fstype in ("xfs", "btrfs"):
+ if (fstype == "xfs" and
+ util.kernel_version() < (4, 18)) or fstype == "btrfs":
create_swap(fname, size, "dd")
else:
try:
@@ -273,7 +274,8 @@ def create_swapfile(fname: str, size: str) -> None:
LOG.warning("Will attempt with dd.")
create_swap(fname, size, "dd")
- util.chmod(fname, 0o600)
+ if os.path.exists(fname):
+ util.chmod(fname, 0o600)
try:
subp.subp(['mkswap', fname])
except subp.ProcessExecutionError:
diff --git a/cloudinit/util.py b/cloudinit/util.py
index 624c560d..edd37039 100644
--- a/cloudinit/util.py
+++ b/cloudinit/util.py
@@ -68,6 +68,10 @@ CONTAINER_TESTS = (['systemd-detect-virt', '--quiet', '--container'],
['lxc-is-container'])
+def kernel_version():
+ return tuple(map(int, os.uname().release.split('.')[:2]))
+
+
@lru_cache()
def get_dpkg_architecture(target=None):
"""Return the sanitized string output by `dpkg --print-architecture`.