[Libvirt-cim] [PATCH] Verify specified UUID is not in use by existing guest

Kaitlin Rupert kaitlin at linux.vnet.ibm.com
Wed Jun 24 17:13:15 UTC 2009


# HG changeset patch
# User Kaitlin Rupert <karupert at us.ibm.com>
# Date 1245863542 25200
# Node ID 7417f62e29eb8b37acb66e616e49f51901f610c6
# Parent  76be9533b5bab87a55c14ab68640c82cfd400b7b
Verify specified UUID is not in use by existing guest

Before generating the XML needed to define a guest, make sure a guest with
the same UUID is not already defined.

Signed-off-by: Kaitlin Rupert <karupert at us.ibm.com>

diff -r 76be9533b5ba -r 7417f62e29eb src/Virt_VirtualSystemManagementService.c
--- a/src/Virt_VirtualSystemManagementService.c	Wed Jun 24 09:06:46 2009 -0700
+++ b/src/Virt_VirtualSystemManagementService.c	Wed Jun 24 10:12:22 2009 -0700
@@ -1243,6 +1243,8 @@
         CMPIInstance *inst = NULL;
         char *xml = NULL;
         const char *msg = NULL;
+        virConnectPtr conn = NULL;
+        virDomainPtr dom = NULL;
 
         struct domain *domain = NULL;
 
@@ -1268,6 +1270,26 @@
                 goto out;
         }
 
+        if (domain->uuid != NULL) {
+                conn = connect_by_classname(_BROKER, CLASSNAME(ref), NULL);
+                if (conn == NULL) {
+                        cu_statusf(_BROKER, s,
+                                   CMPI_RC_ERR_FAILED,
+                                   "Error connecting to libvirt");
+                        goto out;
+                }
+
+                dom = virDomainLookupByUUIDString(conn, domain->uuid);
+                if (dom != NULL) {
+                        cu_statusf(_BROKER, s,
+                                   CMPI_RC_ERR_FAILED,
+                                   "Guest '%s' is already defined with UUID %s",
+                                   virDomainGetName(dom),
+                                   domain->uuid);
+                        goto out;
+                }
+        }
+
         msg = classify_resources(resources, NAMESPACE(ref), domain);
         if (msg != NULL) {
                 CU_DEBUG("Failed to classify resources: %s", msg);
@@ -1295,6 +1317,8 @@
  out:
         cleanup_dominfo(&domain);
         free(xml);
+        virDomainFree(dom);
+        virConnectClose(conn);
 
         return inst;
 }




More information about the Libvirt-cim mailing list