Hi Karel,
This looks good to me. I'll commit it to the repo shortly. I'm also going
to change the DBus stuff a little so that it doesn't use the activation
capabilities. Currently if you start virt-manager for the first time, it
will actually ask DBus to activate it & then the initial processs will
quit. This really messes with GNOME keyring & AT-SPI bits because the
DBus activated version is missing the GNOME session info. With your addition
of command line args, there shoul be no need for the dbus activation stuff
and gnome-applet-vm can invoke virt-manager directly.
Dan.
On Thu, Oct 26, 2006 at 12:05:25AM +0200, Karel Zak wrote:
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(a)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__":
--
|=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=|
|=- Perl modules:
http://search.cpan.org/~danberr/ -=|
|=- Projects:
http://freshmeat.net/~danielpb/ -=|
|=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|