@@ -1,7 +1,20 @@
#!/usr/bin/env python3
+"""
+QEMU Object Model FUSE filesystem tool
+
+This script offers a simple FUSE filesystem within which the QOM tree
+may be browsed, queried and edited using traditional shell tooling.
+
+This script requires the 'fusepy' python package;
+you may install it by using ``pip3 install --user fusepy``.
+
+ENV:
+ QMP_SOCKET: Path to the QMP server socket
+
+Usage:
+ qom-fuse /mount/to/here
+"""
##
-# QEMU Object Model test tools
-#
# Copyright IBM, Corp. 2012
# Copyright (C) 2020 Red Hat, Inc.
#
@@ -30,6 +43,7 @@ fuse.fuse_python_api = (0, 2)
class QOMFS(Operations):
+ """QOMFS implements fuse.Operations to provide a QOM filesystem."""
def __init__(self, qmp):
self.qmp = qmp
self.qmp.connect()
@@ -37,6 +51,7 @@ class QOMFS(Operations):
self.ino_count = 1
def get_ino(self, path):
+ """Get an inode number for a given QOM path."""
if path in self.ino_map:
return self.ino_map[path]
self.ino_map[path] = self.ino_count
@@ -44,6 +59,7 @@ class QOMFS(Operations):
return self.ino_map[path]
def is_object(self, path):
+ """Is the given QOM path an object?"""
try:
self.qmp.command('qom-list', path=path)
return True
@@ -51,6 +67,7 @@ class QOMFS(Operations):
return False
def is_property(self, path):
+ """Is the given QOM path a property?"""
path, prop = path.rsplit('/', 1)
if path == '':
path = '/'
@@ -63,6 +80,7 @@ class QOMFS(Operations):
return False
def is_link(self, path):
+ """Is the given QOM path a link?"""
path, prop = path.rsplit('/', 1)
if path == '':
path = '/'
The methods inherited from fuse don't need docstrings; that's up to fusepy to handle. Signed-off-by: John Snow <jsnow@redhat.com> --- scripts/qmp/qom-fuse | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-)