/* Extracts the CPU definition XML strings from a file which may contain either
* - just the CPU definitions,
- * - domain XMLs, or
- * - capabilities XMLs.
+ * - domain XMLs,
+ * - capabilities XMLs, or
+ * - domain capabilities XMLs.
*
* Returns NULL terminated string list.
*/
n = virXPathNodeSet("/container/cpu|"
"/container/domain/cpu|"
- "/container/capabilities/host/cpu",
+ "/container/capabilities/host/cpu|"
+ "/container/domainCapabilities/cpu/"
+ "mode[@name='host-model' and @supported='yes']",
ctxt, &nodes);
if (n < 0)
goto error;
if (n == 0) {
vshError(ctl, _("File '%s' does not contain any <cpu> element or "
- "valid domain or capabilities XML"), xmlFile);
+ "valid domain XML, host capabilities XML, or "
+ "domain capabilities XML"), xmlFile);
goto error;
}
cpus = vshCalloc(ctl, n + 1, sizeof(const char *));
for (i = 0; i < n; i++) {
+ /* If the user provided domain capabilities XML, we need to replace
+ * <mode ...> element with <cpu>. */
+ if (xmlStrEqual(nodes[i]->name, BAD_CAST "mode")) {
+ xmlNodeSetName(nodes[i], (const xmlChar *)"cpu");
+ while (nodes[i]->properties) {
+ if (xmlRemoveProp(nodes[i]->properties) < 0) {
+ vshError(ctl,
+ _("Cannot extract CPU definition from domain "
+ "capabilities XML"));
+ goto error;
+ }
+ }
+ }
+
if (!(cpus[i] = virXMLNodeToString(xml, nodes[i]))) {
vshSaveLibvirtError();
goto error;
contain either host or guest CPU definition. The host CPU definition is the
<cpu> element and its contents as printed by B<capabilities> command. The
guest CPU definition is the <cpu> element and its contents from domain XML
-definition. In addition to the <cpu> element itself, this command accepts
-full domain or capabilities XML containing the <cpu> element. For more
-information on guest CPU definition see:
+definition or the CPU definition created from the host CPU model found in
+domain capabilities XML (printed by B<domcapabilities> command). In
+addition to the <cpu> element itself, this command accepts
+full domain XML, capabilities XML, or domain capabilities XML containing
+the CPU definition. For more information on guest CPU definition see:
L<https://libvirt.org/formatdomain.html#elementsCPU>. If I<--error> is
specified, the command will return an error when the given CPU is
incompatible with host CPU and a message providing more details about the