From e3e62e8bdf7e2bf02fdeacfc7625a08a67a9db21 Mon Sep 17 00:00:00 2001 From: Joseph Bajin Date: Mon, 18 Aug 2014 10:32:54 -0400 Subject: new: Added FreeBSD support to ConfigDrive --- cloudinit/sources/DataSourceConfigDrive.py | 14 ++++++++++++-- cloudinit/util.py | 15 ++++++++++++--- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/cloudinit/sources/DataSourceConfigDrive.py b/cloudinit/sources/DataSourceConfigDrive.py index 0c35f83a..7416ceec 100644 --- a/cloudinit/sources/DataSourceConfigDrive.py +++ b/cloudinit/sources/DataSourceConfigDrive.py @@ -37,7 +37,9 @@ DEFAULT_METADATA = { VALID_DSMODES = ("local", "net", "pass", "disabled") FS_TYPES = ('vfat', 'iso9660') LABEL_TYPES = ('config-2',) -OPTICAL_DEVICES = tuple(('/dev/sr%s' % i for i in range(0, 2))) +POSSIBLE_MOUNTS = ('sr', 'cd') +OPTICAL_DEVICES = tuple(('/dev/%s%s' % (z,i) for z in POSSIBLE_MOUNTS + for i in range(0, 2))) class DataSourceConfigDrive(openstack.SourceMixin, sources.DataSource): @@ -70,7 +72,15 @@ class DataSourceConfigDrive(openstack.SourceMixin, sources.DataSource): if not found: for dev in find_candidate_devs(): try: - results = util.mount_cb(dev, read_config_drive) + # Set mtype if freebsd and turn off sync + if dev.startswith("/dev/cd"): + mtype = "cd9660" + sync = False + else: + mtype = None + sync = True + results = util.mount_cb(dev, read_config_drive, mtype=mtype, + sync=sync) found = dev except openstack.NonReadable: pass diff --git a/cloudinit/util.py b/cloudinit/util.py index bc681f4a..a8a26325 100644 --- a/cloudinit/util.py +++ b/cloudinit/util.py @@ -1294,12 +1294,16 @@ def ensure_dir(path, mode=None): @contextlib.contextmanager -def unmounter(umount): +def unmounter(umount, lazy_support=True): try: yield umount finally: if umount: - umount_cmd = ["umount", '-l', umount] + # Do not use Lazy Mode on some systems (freebsd) + if lazy_support: + umount_cmd = ["umount", '-l', umount] + else: + umount_cmd = ["umount", umount] subp(umount_cmd) @@ -1382,7 +1386,12 @@ def mount_cb(device, callback, data=None, rw=False, mtype=None, sync=True): # Be nice and ensure it ends with a slash if not mountpoint.endswith("/"): mountpoint += "/" - with unmounter(umount): + # Set lazy_support to false if FreeBSD + if device.startswith("/dev/cd"): + lazy_support = False + else: + lazy_support = True + with unmounter(umount,lazy_support): if data is None: ret = callback(mountpoint) else: -- cgit v1.2.3