On Wed, Sep 11, 2013 at 11:15:02AM +0800, Gao feng wrote:
This patch introduces virDBusIsServiceEnabled, we can use
this method to get if the service is supported.
In one case, if org.freedesktop.machine1 is unavailable on
host, we should skip creating machine through systemd.
Signed-off-by: Gao feng <gaofeng(a)cn.fujitsu.com>
---
src/util/virdbus.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++
src/util/virdbus.h | 1 +
src/util/virsystemd.c | 17 +++++--------
3 files changed, 73 insertions(+), 11 deletions(-)
diff --git a/src/util/virdbus.c b/src/util/virdbus.c
index 62c31be..ad3045a 100644
--- a/src/util/virdbus.c
+++ b/src/util/virdbus.c
@@ -1207,6 +1207,66 @@ int virDBusMessageRead(DBusMessage *msg,
return ret;
}
+/**
+ * virDBusIsServiceEnabled:
+ * @name: service name
+ *
+ * Retruns 0 if service is available, -1 on fatal error, or -2 if service is not
available
+ */
+int virDBusIsServiceEnabled(const char *name)
+{
+ DBusConnection *conn;
+ DBusMessage *reply = NULL;
+ DBusMessageIter iter, sub;
+ int ret = -1;
+
+ if (!virDBusHasSystemBus())
+ return -2;
+
+ conn = virDBusGetSystemBus();
+
+ if (virDBusCallMethod(conn,
+ &reply,
+ "org.freedesktop.DBus",
+ "/org/freedesktop/DBus",
+ "org.freedesktop.DBus",
+ "ListActivatableNames",
+ DBUS_TYPE_INVALID) < 0) {
+
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("ListActivatableNames failed"));
ACK, but no need for this, since virDBusCallMethod will already have
reported the error.
I'll remove this virReportError and push it, so no need to repost.
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|