]> xenbits.xensource.com Git - libvirt.git/commitdiff
virsh: Preserve startupPolicy in change-media command
authorMichal Privoznik <mprivozn@redhat.com>
Thu, 24 Sep 2015 16:00:06 +0000 (18:00 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 29 Sep 2015 11:29:29 +0000 (13:29 +0200)
https://bugzilla.redhat.com/show_bug.cgi?id=1250331

Even after my rework of startupPolicy handling, one command
slipped my attention. The change-media command has a very unique
approach to constructing disk XML. However, it will not preserve
startupPolicy attribute.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
tools/virsh-domain.c

index fb138d56a102eb13e689e00f8c8d934e9d516218..456e27322d9286b3746aff1306a97c777f4bd1b8 100644 (file)
@@ -11534,6 +11534,7 @@ virshUpdateDiskXML(xmlNodePtr disk_node,
     xmlNodePtr source = NULL;
     char *device_type = NULL;
     char *ret = NULL;
+    char *startupPolicy = NULL;
 
     if (!disk_node)
         return NULL;
@@ -11567,13 +11568,15 @@ virshUpdateDiskXML(xmlNodePtr disk_node,
         goto cleanup;
     }
 
-    if (type == VIRSH_UPDATE_DISK_XML_INSERT && source) {
-        vshError(NULL, _("The disk device '%s' already has media"), target);
-        goto cleanup;
-    }
-
-    /* remove current source */
     if (source) {
+        if (type == VIRSH_UPDATE_DISK_XML_INSERT) {
+            vshError(NULL, _("The disk device '%s' already has media"), target);
+            goto cleanup;
+        }
+
+        startupPolicy = virXMLPropString(source, "startupPolicy");
+
+        /* remove current source */
         xmlUnlinkNode(source);
         xmlFreeNode(source);
         source = NULL;
@@ -11597,6 +11600,8 @@ virshUpdateDiskXML(xmlNodePtr disk_node,
         else
             xmlNewProp(source, BAD_CAST "file", BAD_CAST new_source);
 
+        if (startupPolicy)
+            xmlNewProp(source, BAD_CAST "startupPolicy", BAD_CAST startupPolicy);
         xmlAddChild(disk_node, source);
     }
 
@@ -11607,6 +11612,7 @@ virshUpdateDiskXML(xmlNodePtr disk_node,
 
  cleanup:
     VIR_FREE(device_type);
+    VIR_FREE(startupPolicy);
     return ret;
 }