[Libvir] virt-manager command line options

Karel Zak kzak at redhat.com
Wed Oct 25 22:05:25 UTC 2006


 We need a way how call virt-manager methods without D-BUS. This patch
 adds new --show-* command line options.

 The --show-* options need to be used together with the --connect
 option.

 Daniel, I also added an OptionValueError exception. It's not perfect
 solution, but I'm not sure what's your favourite way for error messages
 in virt-manager when GTK is not initialized yet. 

        # virt-manager --help 
        usage: virt-manager.py [options]

        options:
          -h, --help            show this help message and exit
          -c URI, --connect=URI
                                Connect to hypervisor at URI
          --no-dbus             Disable DBus service for controlling UI
          --show-domain-creator
                                Create a new virtual machine
          --show-domain-editor=UUID
                                Edit a domain configuration
          --show-domain-performance=UUID
                                Show a domain performance
          --show-domain-console=UUID
                                Show a domain console
          --show-host-summary   Show a host summary


    Karel


# HG changeset patch
# User Karel Zak <kzak at redhat.com>
# Node ID 3aab017160416137fe3033e13a206303287e5dd9
# Parent  127d61c9062e0ed5662f412f5edbb6c7dbd5582f
add command line option

diff -r 127d61c9062e -r 3aab01716041 src/virt-manager.py.in
--- a/src/virt-manager.py.in	Thu Oct 19 13:48:03 2006 -0400
+++ b/src/virt-manager.py.in	Wed Oct 25 23:24:24 2006 +0200
@@ -70,7 +70,7 @@ dbus.glib.threads_init()
 dbus.glib.threads_init()
 import dbus.service
 
-from optparse import OptionParser
+from optparse import OptionParser, OptionValueError
 
 appname = "::PACKAGE::"
 appversion = "::VERSION::"
@@ -102,21 +102,74 @@ from virtManager.remote import vmmRemote
 
 gtk.window_set_default_icon_from_file(icon_dir + "/" + appname + "-icon.svg")
 
+# maps --show-* to engine methods
+def show_engine(engine, show, uri, uuid):
+    if show=='creator':
+        engine.show_create(uri)
+    elif show=='editor':
+        engine.show_details_config(uri, uuid)
+    elif show=='performance':
+        engine.show_details_performance(uri, uuid)
+    elif show=='console':
+        engine.show_console(uri, uuid)
+    elif show=='summary' or uri:
+        engine.show_manager(uri)
+    else:
+        engine.show_connect()
+
+# maps --show-* to remote manager methods
+def show_remote(managerObj, show, uri, uuid):
+    if show=='creator':
+        managerObj.show_domain_creator(uri)
+    elif show=='editor':
+        managerObj.show_domain_editor(uri, uuid)
+    elif show=='performance':
+        managerObj.show_domain_performance(uri, uuid)
+    elif show=='console':
+        managerObj.show_domain_console(uri, uuid)
+    elif show=='summary' or uri:
+        managerObj.show_host_summary(uri)
+    else:
+        managerObj.show_connect()
+
+# Generic OptionParser callback for all --show-* options
+# This routine stores UUID to options.uuid for all --show-* options 
+# where is metavar="UUID" and also sets options.show
+def opt_show_cb(option, opt_str, value, parser):
+    if option.metavar=="UUID":
+        setattr(parser.values, "uuid", value)        
+    s = str(option)
+    show = s[s.rindex('-')+1:]
+    setattr(parser.values, "show", show)
+
 # Run me!
 def main():
     optParser = OptionParser()
-    optParser.add_option("-c", "--connect", dest="uri", help="Connect to hypervisor at URI", metavar="URI")
-    optParser.add_option("--no-dbus", action="store_true", dest="nodbus", help="Disable DBus service for controlling UI")
+    optParser.set_defaults(uuid=None)
+    optParser.add_option("-c", "--connect", dest="uri", 
+        help="Connect to hypervisor at URI", metavar="URI")
+    optParser.add_option("--no-dbus", action="store_true", dest="nodbus", 
+        help="Disable DBus service for controlling UI")
+    optParser.add_option("--show-domain-creator", action="callback", 
+        callback=opt_show_cb, dest="show", help="Create a new virtual machine")
+    optParser.add_option("--show-domain-editor",  type="string", metavar="UUID",
+        action="callback", callback=opt_show_cb, help="Edit a domain configuration")
+    optParser.add_option("--show-domain-performance", type="string", metavar="UUID", 
+        action="callback", callback=opt_show_cb, help="Show a domain performance")
+    optParser.add_option("--show-domain-console", type="string", metavar="UUID",
+        action="callback", callback=opt_show_cb, help="Show a domain console")
+    optParser.add_option("--show-host-summary", action="callback", 
+       callback=opt_show_cb, help="Show a host summary")
 
     (options, args) = optParser.parse_args()
+
+    if options.show and options.uri==None:
+        raise OptionValueError("can't use --show-* options without --connect")
 
     config = vmmConfig(appname, appversion, gconf_dir, glade_dir, icon_dir)
     engine = vmmEngine(config)
     if options.nodbus:
-        if options.uri != None:
-            engine.show_manager(options.uri)
-        else:
-            engine.show_connect()
+        show_engine(engine, options.show, options.uri, options.uuid)
     else:
         bus = None
         try:
@@ -135,19 +188,14 @@ def main():
                 managerProxy = bus.get_object("com.redhat.virt.manager", "/com/redhat/virt/manager")
                 managerObj = dbus.Interface(managerProxy, "com.redhat.virt.manager")
 
-                if options.uri != None:
-                    managerObj.show_host_summary(options.uri)
-                else:
-                    managerObj.show_connect()
+                show_remote(managerObj, options.show, options.uri, options.uuid)
+
                 # yes, we exit completely now - remote service is in charge
                 return
         except:
             logging.warning("Could not connection to session bus, disabling DBus service " + \
                             str(sys.exc_info()[0]) + " " + str(sys.exc_info()[1]))
-            if options.uri != None:
-                engine.show_manager(options.uri)
-            else:
-                engine.show_connect()
+            show_engine(engine, options.show, options.uri, options.uuid)
     gtk.main()
 
 if __name__ == "__main__":




More information about the libvir-list mailing list