[elbe-devel] [PATCH 4/4] initvmaction: improve errormessages, when libvirt.open() fails

Torben Hohn torben.hohn at linutronix.de
Thu Apr 26 17:01:49 CEST 2018


in the testssystem we saw 2 Exceptions:

---------------------------------------------------------------------------
00:03:06.085 [elbe] Running shell script
00:03:06.356 + pyjutest ./elbe initvm create --devel
00:03:06.616 libvirt: XML-RPC error : Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory
00:03:06.616 Traceback (most recent call last):
00:03:06.617   File "./elbe", line 55, in <module>
00:03:06.617     cmdmod.run_command(sys.argv[2:])
00:03:06.617   File
+"/home/jenkins/workspace/elbe-ci_master-GR3Z27HXOEGCLBRIZJ26LAS7Z5D6A3IGOIJJKIZKSYAUUYZJSUYQ/elbe/elbepack/commands/initvm.py", line 81, in
+run_command
00:03:06.617     action = InitVMAction(args[0])
00:03:06.617   File "/home/jenkins/workspace/elbe-ci_master-GR3Z27HXOEGCLBRIZJ26LAS7Z5D6A3IGOIJJKIZKSYAUUYZJSUYQ/elbe/elbepack/initvmaction.py",
+line 214, in __init__
00:03:06.617     InitVMAction.__init__(self, node, initvmNeeded=False)
00:03:06.617   File "/home/jenkins/workspace/elbe-ci_master-GR3Z27HXOEGCLBRIZJ26LAS7Z5D6A3IGOIJJKIZKSYAUUYZJSUYQ/elbe/elbepack/initvmaction.py",
+line 76, in __init__
00:03:06.617     self.conn = libvirt.open("qemu:///system")
00:03:06.617   File "/usr/lib/python2.7/dist-packages/libvirt.py", line 255, in open
00:03:06.617     if ret is None:raise libvirtError('virConnectOpen() failed')
---------------------------------------------------------------------------

and

---------------------------------------------------------------------------
00:04:50.675 libvirt: Polkit error : authentication unavailable: no polkit agent available to authenticate action 'org.libvirt.unix.manage'
00:04:50.675 Traceback (most recent call last):
00:04:50.675   File "./elbe", line 55, in <module>
00:04:50.675     cmdmod.run_command(sys.argv[2:])
00:04:50.675   File
+"/home/jenkins/workspace/elbe-ci_master-GR3Z27HXOEGCLBRIZJ26LAS7Z5D6A3IGOIJJKIZKSYAUUYZJSUYQ/elbe/elbepack/commands/initvm.py", line 81, in
+run_command
00:04:50.675     action = InitVMAction(args[0])
00:04:50.675   File "/home/jenkins/workspace/elbe-ci_master-GR3Z27HXOEGCLBRIZJ26LAS7Z5D6A3IGOIJJKIZKSYAUUYZJSUYQ/elbe/elbepack/initvmaction.py",
+line 214, in __init__
00:04:50.675     InitVMAction.__init__(self, node, initvmNeeded=False)
00:04:50.675   File "/home/jenkins/workspace/elbe-ci_master-GR3Z27HXOEGCLBRIZJ26LAS7Z5D6A3IGOIJJKIZKSYAUUYZJSUYQ/elbe/elbepack/initvmaction.py",
+line 76, in __init__
00:04:50.675     self.conn = libvirt.open("qemu:///system")
00:04:50.675   File "/usr/lib/python2.7/dist-packages/libvirt.py", line 255, in open
00:04:50.675     if ret is None:raise libvirtError('virConnectOpen() failed')
00:04:50.675 libvirt.libvirtError: authentication unavailable: no polkit agent available to authenticate action 'org.libvirt.unix.manage'
---------------------------------------------------------------------------

Add code, to catch em, and provide a meaningful Error message

Signed-off-by: Torben Hohn <torben.hohn at linutronix.de>
---
 elbepack/initvmaction.py | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/elbepack/initvmaction.py b/elbepack/initvmaction.py
index 05ebf877..76fbc93d 100644
--- a/elbepack/initvmaction.py
+++ b/elbepack/initvmaction.py
@@ -81,7 +81,29 @@ class InitVMAction(object):
     def __init__(self, node, initvmNeeded=True):
         # The tag initvmNeeded is required in order to be able to run `elbe
         # initvm create`
-        self.conn = libvirt.open("qemu:///system")
+        try:
+            self.conn = libvirt.open("qemu:///system")
+        except libvirt.libvirtError as verr:
+            if type(verr.args[0]) is not str:
+                raise
+            if verr.args[0].startswith('Failed to connect socket to'):
+                print("", file=sys.stderr)
+                print("Accessing libvirt provider system not possible.", file=sys.stderr)
+                print("Make sure that package 'libvirt-daemon-system' is", file=sys.stderr)
+                print("installed, and the service is running properly", file=sys.stderr)
+                sys.exit(20)
+
+            if verr.args[0].startswith('authentication unavailable'):
+                print("", file=sys.stderr)
+                print("Accessing libvirt provider system not allowed.", file=sys.stderr)
+                print("Users which want to use elbe need to be members of the 'libvirt' group.", file=sys.stderr)
+                print("'gpasswd -a <user> libvirt' and logging in again,", file=sys.stderr)
+                print("should fix the problem.", file=sys.stderr)
+                sys.exit(20)
+
+            # In case we get here, the exception is unknown, and we want to see it
+            raise
+
         try:
             self.initvm = self.conn.lookupByName(cfg['initvm_domain'])
         except libvirt.libvirtError:
-- 
2.11.0




More information about the elbe-devel mailing list