提交 e3f1d2a8 编写于 作者: J Ján Tomko

Allow cloning volumes with no capacity specified

In virStorageVolCreateXML, add VIR_VOL_XML_PARSE_NO_CAPACITY
to the call parsing the XML of the new volume to make the capacity
optional.

If the capacity is omitted, use the capacity of the old volume.
We already do that for values that are less than the original
volume capacity.
上级 2bd47d9c
......@@ -1810,7 +1810,8 @@ storageVolCreateXMLFrom(virStoragePoolPtr obj,
goto cleanup;
}
newvol = virStorageVolDefParseString(pool->def, xmldesc, 0);
newvol = virStorageVolDefParseString(pool->def, xmldesc,
VIR_VOL_XML_PARSE_NO_CAPACITY);
if (newvol == NULL)
goto cleanup;
......@@ -1824,7 +1825,8 @@ storageVolCreateXMLFrom(virStoragePoolPtr obj,
goto cleanup;
}
/* Is there ever a valid case for this? */
/* Use the original volume's capacity in case the new capacity
* is less than that, or it was omitted */
if (newvol->target.capacity < origvol->target.capacity)
newvol->target.capacity = origvol->target.capacity;
......
qemu-img convert -f raw -O qcow2 \
-o encryption=on,preallocation=metadata \
/var/lib/libvirt/images/sparse.img \
/var/lib/libvirt/images/OtherDemo.img
......@@ -49,6 +49,7 @@ testCompareXMLToArgvFiles(bool shouldFail,
char *expectedCmdline = NULL;
char *actualCmdline = NULL;
int ret = -1;
unsigned long parse_flags = 0;
int len;
......@@ -84,7 +85,10 @@ testCompareXMLToArgvFiles(bool shouldFail,
goto cleanup;
}
if (!(vol = virStorageVolDefParseString(pool, volXmlData, 0)))
if (inputvolxml)
parse_flags |= VIR_VOL_XML_PARSE_NO_CAPACITY;
if (!(vol = virStorageVolDefParseString(pool, volXmlData, parse_flags)))
goto cleanup;
if (inputvolxml &&
......@@ -305,6 +309,9 @@ mymain(void)
DO_TEST("pool-dir", "vol-qcow2-nocow",
NULL, NULL,
"qcow2-nocow-compat", 0, FMT_COMPAT);
DO_TEST("pool-dir", "vol-qcow2-nocapacity",
"pool-dir", "vol-file",
"qcow2-nocapacity-convert-prealloc", flags, FMT_OPTIONS);
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
......
<volume>
<name>OtherDemo.img</name>
<key>/var/lib/libvirt/images/OtherDemo.img</key>
<source>
</source>
<target>
<path>/var/lib/libvirt/images/OtherDemo.img</path>
<format type='qcow2'/>
<permissions>
<mode>0644</mode>
<owner>0</owner>
<group>0</group>
<label>unconfined_u:object_r:virt_image_t:s0</label>
</permissions>
<encryption format='qcow'>
<secret type='passphrase' uuid='e78d4b51-a2af-485f-b0f5-afca709a80f4'/>
</encryption>
</target>
</volume>
<volume type='file'>
<name>OtherDemo.img</name>
<key>/var/lib/libvirt/images/OtherDemo.img</key>
<source>
</source>
<capacity unit='bytes'>0</capacity>
<allocation unit='bytes'>0</allocation>
<target>
<path>/var/lib/libvirt/images/OtherDemo.img</path>
<format type='qcow2'/>
<permissions>
<mode>0644</mode>
<owner>0</owner>
<group>0</group>
<label>unconfined_u:object_r:virt_image_t:s0</label>
</permissions>
<encryption format='qcow'>
<secret type='passphrase' uuid='e78d4b51-a2af-485f-b0f5-afca709a80f4'/>
</encryption>
</target>
</volume>
......@@ -126,6 +126,8 @@ mymain(void)
DO_TEST("pool-sheepdog", "vol-sheepdog");
DO_TEST("pool-gluster", "vol-gluster-dir");
DO_TEST("pool-gluster", "vol-gluster-dir-neg-uid");
DO_TEST_FULL("pool-dir", "vol-qcow2-nocapacity",
VIR_VOL_XML_PARSE_NO_CAPACITY);
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册