Merge "vfs: guestfs logging integration"

This commit is contained in:
Jenkins 2014-10-10 10:25:45 +00:00 committed by Gerrit Code Review
commit 5a37d543ef
3 changed files with 67 additions and 0 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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")