Red Hat Bugzilla – Bug 1197834
Update python-augeas to 0.5 or above to fix some caching issue in combination with dbus
Last modified: 2015-11-19 05:16:02 EST
Description of problem: The version of python-augeas packaged in EL7 does not work as expected when used with dbus. Version-Release number of selected component (if applicable): python-augeas-0.4.1-5.el7.noarch How reproducible: 100% Steps to Reproduce: #!/usr/bin/python import sys import dbus import dbus.service from dbus.mainloop.glib import DBusGMainLoop import gobject import augeas BUS_NAME = "org.augeasproject.Augeas" DBusGMainLoop(set_as_default=True) class Test(dbus.service.Object): def __init__(self): bus = dbus.service.BusName(BUS_NAME, bus=dbus.SessionBus()) dbus.service.Object.__init__(self, bus, "/Service" ) @dbus.service.method(dbus_interface=BUS_NAME) def get(self, path): print "Called with %s" % path return augeas.Augeas().get(path) if __name__ == "__main__": print sys.argv if "-d" in sys.argv: DBusGMainLoop(set_as_default=True) loop = gobject.MainLoop() print "listening ..." d = Test() loop.run() elif "-c" in sys.argv: bus = dbus.SessionBus() obj = bus.get_object(BUS_NAME, "/Service") test = dbus.Interface(obj, "org.augeasproject.Augeas") print test.get("/files/etc/hostname/hostname") print test.get("/files/etc/resolv.conf/nameserver[1]") ------------------------------------------------------------- Call the service with some path (either with dbus-send or using the script with "-c" Actual results: python-augeas returns "None" for all paths checked Expected results: The actual values are returned Additional info: This works as expected with python-augeas 0.5
Verified with python-augeas-0.5.0-2.el7, augeas-1.4.0-1.el7. Step to verify: 1. Prepare the test script test-dbus.py. # cat test-dbus.py #!/usr/bin/python import sys import dbus import dbus.service from dbus.mainloop.glib import DBusGMainLoop import gobject import augeas BUS_NAME = "org.augeasproject.Augeas" DBusGMainLoop(set_as_default=True) class Test(dbus.service.Object): def __init__(self): bus = dbus.service.BusName(BUS_NAME, bus=dbus.SessionBus()) dbus.service.Object.__init__(self, bus, "/Service" ) @dbus.service.method(dbus_interface=BUS_NAME) def get(self, path): print "Called with %s" % path return augeas.Augeas().get(path) if __name__ == "__main__": print sys.argv if "-d" in sys.argv: DBusGMainLoop(set_as_default=True) loop = gobject.MainLoop() print "listening ..." d = Test() loop.run() elif "-c" in sys.argv: bus = dbus.SessionBus() obj = bus.get_object(BUS_NAME, "/Service") test = dbus.Interface(obj, "org.augeasproject.Augeas") print test.get("/files/etc/hostname/hostname") print test.get("/files/etc/resolv.conf/nameserver[1]") 2. # ./test.py -d & # ./test.py -c ['./test.py', '-c'] Called with /files/etc/hostname/hostname rhel7libguestfs Called with /files/etc/resolv.conf/nameserver[1] 10.66.78.111 Get the /etc/hostname/hostname and /etc/resolv.conf/nameserver[1] successfully. So verified.
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://rhn.redhat.com/errata/RHBA-2015-2133.html