summaryrefslogtreecommitdiff
path: root/cloudinit/util.py
diff options
context:
space:
mode:
authorGonéri Le Bouder <goneri@lebouder.net>2020-03-12 14:37:08 -0400
committerGitHub <noreply@github.com>2020-03-12 12:37:08 -0600
commit94838def772349387e16cc642b3642020e22deda (patch)
treefa29ba70a8b315e2984f19e8ccb35899d016b2b7 /cloudinit/util.py
parent65a1b907c336786bce3917fad3f87c67f0caa7bf (diff)
downloadvyos-cloud-init-94838def772349387e16cc642b3642020e22deda.tar.gz
vyos-cloud-init-94838def772349387e16cc642b3642020e22deda.zip
Add Netbsd support (#62)
Add support for the NetBSD Operating System. Features in this branch: * Add BSD distro parent class from which NetBSD and FreeBSD can specialize * Add *bsd util functions to cloudinit.net and cloudinit.net.bsd_utils * subclass cloudinit.distro.freebsd.Distro from bsd.Distro * Add new cloudinit.distro.netbsd and cloudinit.net.renderer for netbsd * Add lru_cached util.is_NetBSD functions * Add NetBSD detection for ConfigDrive and NoCloud datasources This branch has been tested with: - NoCloud and OpenStack (with and without config-drive) - NetBSD 8.1. and 9.0 - FreeBSD 11.2 and 12.1 - Python 3.7 only, because of the dependency oncrypt.METHOD_BLOWFISH. This version is available in NetBSD 7, 8 and 9 anyway
Diffstat (limited to 'cloudinit/util.py')
-rw-r--r--cloudinit/util.py33
1 files changed, 28 insertions, 5 deletions
diff --git a/cloudinit/util.py b/cloudinit/util.py
index 132f6051..718c6959 100644
--- a/cloudinit/util.py
+++ b/cloudinit/util.py
@@ -552,6 +552,11 @@ def is_FreeBSD():
return system_info()['variant'] == "freebsd"
+@lru_cache()
+def is_NetBSD():
+ return system_info()['variant'] == "netbsd"
+
+
def get_cfg_option_bool(yobj, key, default=False):
if key not in yobj:
return default
@@ -625,10 +630,9 @@ def get_linux_distro():
flavor = match.groupdict()['codename']
if distro_name == 'rhel':
distro_name = 'redhat'
- elif os.path.exists('/bin/freebsd-version'):
- distro_name = 'freebsd'
- distro_version, _ = subp(['uname', '-r'])
- distro_version = distro_version.strip()
+ elif 'BSD' in platform.system():
+ distro_name = platform.system().lower()
+ distro_version = platform.release()
else:
dist = ('', '', '')
try:
@@ -675,7 +679,7 @@ def system_info():
var = 'suse'
else:
var = 'linux'
- elif system in ('windows', 'darwin', "freebsd"):
+ elif system in ('windows', 'darwin', "freebsd", "netbsd"):
var = system
info['variant'] = var
@@ -1254,6 +1258,21 @@ def close_stdin():
os.dup2(fp.fileno(), sys.stdin.fileno())
+def find_devs_with_netbsd(criteria=None, oformat='device',
+ tag=None, no_cache=False, path=None):
+ if not path:
+ path = "/dev/cd0"
+ cmd = ["mscdlabel", path]
+ out, _ = subp(cmd, capture=True, decode="replace", rcs=[0, 1])
+ result = out.split()
+ if result and len(result) > 2:
+ if criteria == "TYPE=iso9660" and "ISO" in result:
+ return [path]
+ if criteria == "LABEL=CONFIG-2" and '"config-2"' in result:
+ return [path]
+ return []
+
+
def find_devs_with(criteria=None, oformat='device',
tag=None, no_cache=False, path=None):
"""
@@ -1263,6 +1282,10 @@ def find_devs_with(criteria=None, oformat='device',
LABEL=<label>
UUID=<uuid>
"""
+ if is_NetBSD():
+ return find_devs_with_netbsd(criteria, oformat,
+ tag, no_cache, path)
+
blk_id_cmd = ['blkid']
options = []
if criteria: