summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cloudinit/sources/DataSourceConfigDrive.py14
-rw-r--r--cloudinit/util.py15
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: