summaryrefslogtreecommitdiff
path: root/nova/privsep
diff options
context:
space:
mode:
authorMichael Still <mikal@stillhq.com>2017-12-12 03:28:41 +1100
committerMichael Still <mikal@stillhq.com>2018-02-28 07:15:08 +1100
commitfef14351672416bce465b25eb7b1314f13f9eb14 (patch)
treeb96b800d55189d6745c7e8f265126d1cd4ccb188 /nova/privsep
parente94151c1c3dc0f27f14a594b331dbfb6d3bdf1be (diff)
downloadnova-fef14351672416bce465b25eb7b1314f13f9eb14.tar.gz
Move makefs to privsep
Change-Id: I388d31d5e9c1cff10bc534ba69be899e67681ce6 blueprint: hurrah-for-privsep
Diffstat (limited to 'nova/privsep')
-rw-r--r--nova/privsep/fs.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/nova/privsep/fs.py b/nova/privsep/fs.py
index b5c9604d6e..1191660a71 100644
--- a/nova/privsep/fs.py
+++ b/nova/privsep/fs.py
@@ -220,3 +220,34 @@ def ext_journal_disable(device):
@nova.privsep.sys_admin_pctxt.entrypoint
def ext_journal_enable(device):
processutils.execute('tune2fs', '-j', device)
+
+
+@nova.privsep.sys_admin_pctxt.entrypoint
+def mkfs(fs, path, label=None):
+ unprivileged_mkfs(fs, path, label=None)
+
+
+# NOTE(mikal): this method is deliberately not wrapped in a privsep entrypoint
+def unprivileged_mkfs(fs, path, label=None):
+ """Format a file or block device
+
+ :param fs: Filesystem type (examples include 'swap', 'ext3', 'ext4'
+ 'btrfs', etc.)
+ :param path: Path to file or block device to format
+ :param label: Volume label to use
+ """
+ if fs == 'swap':
+ args = ['mkswap']
+ else:
+ args = ['mkfs', '-t', fs]
+ # add -F to force no interactive execute on non-block device.
+ if fs in ('ext3', 'ext4', 'ntfs'):
+ args.extend(['-F'])
+ if label:
+ if fs in ('msdos', 'vfat'):
+ label_opt = '-n'
+ else:
+ label_opt = '-L'
+ args.extend([label_opt, label])
+ args.append(path)
+ processutils.execute(*args)