Merge "vfs: guestfs logging integration"
This commit is contained in:
commit
5a37d543ef
|
@ -13,6 +13,12 @@
|
|||
# under the License.
|
||||
|
||||
|
||||
EVENT_APPLIANCE = 0x1
|
||||
EVENT_LIBRARY = 0x2
|
||||
EVENT_WARNING = 0x3
|
||||
EVENT_TRACE = 0x4
|
||||
|
||||
|
||||
class GuestFS(object):
|
||||
SUPPORT_CLOSE_ON_EXIT = True
|
||||
SUPPORT_RETURN_DICT = True
|
||||
|
@ -33,6 +39,9 @@ class GuestFS(object):
|
|||
self.auginit = False
|
||||
self.root_mounted = False
|
||||
self.backend_settings = None
|
||||
self.trace_enabled = False
|
||||
self.verbose_enabled = False
|
||||
self.event_callback = None
|
||||
|
||||
def launch(self):
|
||||
self.running = True
|
||||
|
@ -168,3 +177,12 @@ class GuestFS(object):
|
|||
elif cfgpath == "/files/etc/group/admins/gid":
|
||||
return 600
|
||||
raise RuntimeError("Unknown path %s", cfgpath)
|
||||
|
||||
def set_trace(self, enabled):
|
||||
self.trace_enabled = enabled
|
||||
|
||||
def set_verbose(self, enabled):
|
||||
self.verbose_enabled = enabled
|
||||
|
||||
def set_event_callback(self, func, events):
|
||||
self.event_callback = (func, events)
|
||||
|
|
|
@ -247,3 +247,18 @@ class VirtDiskVFSGuestFSTest(test.NoDBTestCase):
|
|||
vfs.setup()
|
||||
self.assertNotIn('python_return_dict', vfs.handle.kwargs)
|
||||
vfs.teardown()
|
||||
|
||||
def test_setup_debug_disable(self):
|
||||
vfs = vfsimpl.VFSGuestFS(imgfile="/dummy.qcow2", imgfmt="qcow2")
|
||||
vfs.setup()
|
||||
self.assertFalse(vfs.handle.trace_enabled)
|
||||
self.assertFalse(vfs.handle.verbose_enabled)
|
||||
self.assertIsNone(vfs.handle.event_callback)
|
||||
|
||||
def test_setup_debug_enabled(self):
|
||||
self.flags(debug=True, group='guestfs')
|
||||
vfs = vfsimpl.VFSGuestFS(imgfile="/dummy.qcow2", imgfmt="qcow2")
|
||||
vfs.setup()
|
||||
self.assertTrue(vfs.handle.trace_enabled)
|
||||
self.assertTrue(vfs.handle.verbose_enabled)
|
||||
self.assertIsNotNone(vfs.handle.event_callback)
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
# under the License.
|
||||
|
||||
from eventlet import tpool
|
||||
from oslo.config import cfg
|
||||
from oslo.utils import importutils
|
||||
import six
|
||||
|
||||
|
@ -28,6 +29,15 @@ LOG = logging.getLogger(__name__)
|
|||
guestfs = None
|
||||
forceTCG = False
|
||||
|
||||
guestfs_opts = [
|
||||
cfg.BoolOpt('debug',
|
||||
default=False,
|
||||
help='Enable guestfs debug')
|
||||
]
|
||||
|
||||
CONF = cfg.CONF
|
||||
CONF.register_opts(guestfs_opts, group='guestfs')
|
||||
|
||||
|
||||
def force_tcg(force=True):
|
||||
"""Prevent libguestfs trying to use KVM acceleration
|
||||
|
@ -72,6 +82,27 @@ class VFSGuestFS(vfs.VFS):
|
|||
|
||||
return self
|
||||
|
||||
def configure_debug(self):
|
||||
"""Configures guestfs to be verbose."""
|
||||
if not self.handle:
|
||||
LOG.warning(_LW("Please consider to execute setup before trying "
|
||||
"to configure debug log message."))
|
||||
else:
|
||||
def log_callback(ev, eh, buf, array):
|
||||
if ev == guestfs.EVENT_APPLIANCE:
|
||||
buf = buf.rstrip()
|
||||
LOG.debug("event=%(event)s eh=%(eh)d buf='%(buf)s' "
|
||||
"array=%(array)s", {
|
||||
"event": guestfs.event_to_string(ev),
|
||||
"eh": eh, "buf": buf, "array": array})
|
||||
|
||||
events = (guestfs.EVENT_APPLIANCE | guestfs.EVENT_LIBRARY
|
||||
| guestfs.EVENT_WARNING | guestfs.EVENT_TRACE)
|
||||
|
||||
self.handle.set_trace(True) # just traces libguestfs API calls
|
||||
self.handle.set_verbose(True)
|
||||
self.handle.set_event_callback(log_callback, events)
|
||||
|
||||
def setup_os(self):
|
||||
if self.partition == -1:
|
||||
self.setup_os_inspect()
|
||||
|
@ -149,6 +180,9 @@ class VFSGuestFS(vfs.VFS):
|
|||
else:
|
||||
raise
|
||||
|
||||
if CONF.guestfs.debug:
|
||||
self.configure_debug()
|
||||
|
||||
try:
|
||||
if forceTCG:
|
||||
self.handle.set_backend_settings("force_tcg")
|
||||
|
|
Loading…
Reference in New Issue