Code

libvirt plugin: Further improve the connection handling.
authorFlorian Forster <octo@huhu.verplant.org>
Wed, 12 Aug 2009 13:08:40 +0000 (15:08 +0200)
committerFlorian Forster <octo@noris.net>
Wed, 12 Aug 2009 13:24:39 +0000 (15:24 +0200)
Use the complaint mechanism for failed connection attempts and handle multiple
`Connection' configuration options like other options in other plugins (i. e.
later options overwrite earlier settings of the same name).

src/libvirt.c

index 6ba08fbca5ebc28249c5246e7a9030b49b94b242..6f9e5f126d497b44ef2c42e2cd437cae3f5a1b49 100644 (file)
@@ -24,6 +24,7 @@
 #include "plugin.h"
 #include "configfile.h"
 #include "utils_ignorelist.h"
+#include "utils_complain.h"
 
 #include <libvirt/libvirt.h>
 #include <libvirt/virterror.h>
@@ -50,7 +51,7 @@ static const char *config_keys[] = {
 /* Connection. */
 static virConnectPtr conn = 0;
 static char *conn_string = NULL;
-static int conn_count = 0;
+static c_complain_t conn_complain = C_COMPLAIN_INIT_STATIC;
 
 /* Seconds between list refreshes, 0 disables completely. */
 static int interval = 60;
@@ -155,15 +156,13 @@ lv_config (const char *key, const char *value)
         il_interface_devices = ignorelist_create (1);
 
     if (strcasecmp (key, "Connection") == 0) {
-        if (conn_count++ != 0) {
-            ERROR ("Connection may only be given once in config file");
-            return 1;
-        }
-        conn_string = strdup(value);
-        if (conn_string == NULL) {
+        char *tmp = strdup (value);
+        if (tmp == NULL) {
             ERROR ("libvirt plugin: Connection strdup failed.");
-            return -1;
+            return 1;
         }
+        sfree (conn_string);
+        conn_string = tmp;
         return 0;
     }
 
@@ -255,12 +254,17 @@ lv_read (void)
     int i;
 
     if (conn == NULL) {
+        /* `conn_string == NULL' is acceptable. */
         conn = virConnectOpenReadOnly (conn_string);
         if (conn == NULL) {
-            ERROR ("libvirt plugin: Not connected.");
+            c_complain (LOG_ERR, &conn_complain,
+                    "libvirt plugin: Unable to connect: "
+                    "virConnectOpenReadOnly failed.");
             return -1;
         }
     }
+    c_release (LOG_NOTICE, &conn_complain,
+            "libvirt plugin: Connection established.");
 
     time (&t);