summaryrefslogtreecommitdiff
path: root/cloudinit/util.py
diff options
context:
space:
mode:
authorGonéri Le Bouder <goneri@lebouder.net>2021-06-14 15:39:05 -0400
committerGitHub <noreply@github.com>2021-06-14 14:39:05 -0500
commit59a848c5929cbfca45d95860eb60dfebd0786c94 (patch)
treea962355634c51c6cc03b56c0dceca8c2b345a550 /cloudinit/util.py
parent05b0e35026db3789c56ee9f8192d4a81067325e5 (diff)
downloadvyos-cloud-init-59a848c5929cbfca45d95860eb60dfebd0786c94.tar.gz
vyos-cloud-init-59a848c5929cbfca45d95860eb60dfebd0786c94.zip
add DragonFlyBSD support (#904)
- Mostly based on FreeBSD, the main exception is that `find_devs_with_on_freebsd` does not work. - Since we cannot get the CDROM or the partition labels, `find_devs_with_on_dragonflybsd()` has a more naive approach and returns all the block devices.
Diffstat (limited to 'cloudinit/util.py')
-rw-r--r--cloudinit/util.py46
1 files changed, 44 insertions, 2 deletions
diff --git a/cloudinit/util.py b/cloudinit/util.py
index 2de1123e..f95dc435 100644
--- a/cloudinit/util.py
+++ b/cloudinit/util.py
@@ -392,7 +392,11 @@ def is_Linux():
@lru_cache()
def is_BSD():
- return 'BSD' in platform.system()
+ if 'BSD' in platform.system():
+ return True
+ if platform.system() == 'DragonFly':
+ return True
+ return False
@lru_cache()
@@ -401,6 +405,11 @@ def is_FreeBSD():
@lru_cache()
+def is_DragonFlyBSD():
+ return system_info()['variant'] == "dragonfly"
+
+
+@lru_cache()
def is_NetBSD():
return system_info()['variant'] == "netbsd"
@@ -534,7 +543,9 @@ def system_info():
var = 'suse'
else:
var = 'linux'
- elif system in ('windows', 'darwin', "freebsd", "netbsd", "openbsd"):
+ elif system in (
+ 'windows', 'darwin', "freebsd", "netbsd",
+ "openbsd", "dragonfly"):
var = system
info['variant'] = var
@@ -1195,6 +1206,23 @@ def find_devs_with_openbsd(criteria=None, oformat='device',
return ['/dev/' + i for i in devlist]
+def find_devs_with_dragonflybsd(criteria=None, oformat='device',
+ tag=None, no_cache=False, path=None):
+ out, _err = subp.subp(['sysctl', '-n', 'kern.disks'], rcs=[0])
+ devlist = [i for i in sorted(out.split(), reverse=True)
+ if not i.startswith("md") and not i.startswith("vn")]
+
+ if criteria == "TYPE=iso9660":
+ devlist = [i for i in devlist
+ if i.startswith('cd') or i.startswith('acd')]
+ elif criteria in ["LABEL=CONFIG-2", "TYPE=vfat"]:
+ devlist = [i for i in devlist
+ if not (i.startswith('cd') or i.startswith('acd'))]
+ elif criteria:
+ LOG.debug("Unexpected criteria: %s", criteria)
+ return ['/dev/' + i for i in devlist]
+
+
def find_devs_with(criteria=None, oformat='device',
tag=None, no_cache=False, path=None):
"""
@@ -1213,6 +1241,9 @@ def find_devs_with(criteria=None, oformat='device',
elif is_OpenBSD():
return find_devs_with_openbsd(criteria, oformat,
tag, no_cache, path)
+ elif is_DragonFlyBSD():
+ return find_devs_with_dragonflybsd(criteria, oformat,
+ tag, no_cache, path)
blk_id_cmd = ['blkid']
options = []
@@ -2211,6 +2242,14 @@ def find_freebsd_part(fs):
LOG.warning("Unexpected input in find_freebsd_part: %s", fs)
+def find_dragonflybsd_part(fs):
+ splitted = fs.split('/')
+ if len(splitted) == 3 and splitted[1] == 'dev':
+ return splitted[2]
+ else:
+ LOG.warning("Unexpected input in find_dragonflybsd_part: %s", fs)
+
+
def get_path_dev_freebsd(path, mnt_list):
path_found = None
for line in mnt_list.split("\n"):
@@ -2264,6 +2303,9 @@ def parse_mount(path):
# https://regex101.com/r/T2en7a/1
regex = (r'^(/dev/[\S]+|.*zroot\S*?) on (/[\S]*) '
r'(?=(?:type)[\s]+([\S]+)|\(([^,]*))')
+ if is_DragonFlyBSD():
+ regex = (r'^(/dev/[\S]+|\S*?) on (/[\S]*) '
+ r'(?=(?:type)[\s]+([\S]+)|\(([^,]*))')
for line in mount_locs:
m = re.search(regex, line)
if not m: