mirror of https://gitee.com/openkylin/libvirt.git
conf: add startupPolicy attribute for harddisk
Add startupPolicy attribute for harddisk with type "file", "block" and "dir". 'requisite' is not supported currently for harddisk.
This commit is contained in:
parent
06844ccbaa
commit
93319da42c
|
@ -1620,7 +1620,8 @@
|
|||
policy what to do with the disk if the source file is not accessible.
|
||||
(NB, <code>startupPolicy</code> is not valid for "volume" disk unless
|
||||
the specified storage volume is of "file" type). This is done by the
|
||||
<code>startupPolicy</code> attribute, accepting these values:
|
||||
<code>startupPolicy</code> attribute (<span class="since">Since 0.9.7</span>),
|
||||
accepting these values:
|
||||
<table class="top_table">
|
||||
<tr>
|
||||
<td> mandatory </td>
|
||||
|
@ -1636,7 +1637,10 @@
|
|||
<td> drop if missing at any start attempt </td>
|
||||
</tr>
|
||||
</table>
|
||||
<span class="since">Since 0.9.7</span>
|
||||
<span class="since">Since 1.1.2</span> the <code>startupPolicy</code> is extended
|
||||
to support hard disks besides cdrom and floppy. On guest cold bootup, if a certain disk
|
||||
is not accessible or its disk chain is broken, with startupPolicy 'optional' the guest
|
||||
will drop this disk. This feature doesn't support migration currently.
|
||||
</dd>
|
||||
<dt><code>mirror</code></dt>
|
||||
<dd>
|
||||
|
|
|
@ -1123,6 +1123,9 @@
|
|||
<attribute name="dev">
|
||||
<ref name="absFilePath"/>
|
||||
</attribute>
|
||||
<optional>
|
||||
<ref name="startupPolicy"/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='devSeclabel'/>
|
||||
</optional>
|
||||
|
@ -1141,6 +1144,9 @@
|
|||
<attribute name="dir">
|
||||
<ref name="absFilePath"/>
|
||||
</attribute>
|
||||
<optional>
|
||||
<ref name="startupPolicy"/>
|
||||
</optional>
|
||||
<empty/>
|
||||
</element>
|
||||
</optional>
|
||||
|
|
|
@ -4796,7 +4796,6 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
|
|||
switch (def->type) {
|
||||
case VIR_DOMAIN_DISK_TYPE_FILE:
|
||||
source = virXMLPropString(cur, "file");
|
||||
startupPolicy = virXMLPropString(cur, "startupPolicy");
|
||||
break;
|
||||
case VIR_DOMAIN_DISK_TYPE_BLOCK:
|
||||
source = virXMLPropString(cur, "dev");
|
||||
|
@ -4883,7 +4882,6 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
|
|||
case VIR_DOMAIN_DISK_TYPE_VOLUME:
|
||||
if (virDomainDiskSourcePoolDefParse(cur, def) < 0)
|
||||
goto error;
|
||||
startupPolicy = virXMLPropString(cur, "startupPolicy");
|
||||
break;
|
||||
default:
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
|
@ -4892,6 +4890,8 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
|
|||
goto error;
|
||||
}
|
||||
|
||||
startupPolicy = virXMLPropString(cur, "startupPolicy");
|
||||
|
||||
/* People sometimes pass a bogus '' source path
|
||||
when they mean to omit the source element
|
||||
completely (e.g. CDROM without media). This is
|
||||
|
@ -5464,14 +5464,22 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
|
|||
goto error;
|
||||
}
|
||||
|
||||
if (def->device != VIR_DOMAIN_DISK_DEVICE_CDROM &&
|
||||
def->device != VIR_DOMAIN_DISK_DEVICE_FLOPPY) {
|
||||
virReportError(VIR_ERR_INVALID_ARG,
|
||||
_("Setting disk %s is allowed only for "
|
||||
"cdrom or floppy"),
|
||||
if (def->type == VIR_DOMAIN_DISK_TYPE_NETWORK) {
|
||||
virReportError(VIR_ERR_XML_ERROR,
|
||||
_("Setting disk %s is not allowed for "
|
||||
"disk of network type"),
|
||||
startupPolicy);
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (def->device != VIR_DOMAIN_DISK_DEVICE_CDROM &&
|
||||
def->device != VIR_DOMAIN_DISK_DEVICE_FLOPPY &&
|
||||
val == VIR_DOMAIN_STARTUP_POLICY_REQUISITE) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("Setting disk 'requisite' is allowed only for "
|
||||
"cdrom or floppy"));
|
||||
goto error;
|
||||
}
|
||||
def->startupPolicy = val;
|
||||
}
|
||||
|
||||
|
@ -14121,6 +14129,9 @@ virDomainDiskSourceDefFormat(virBufferPtr buf,
|
|||
case VIR_DOMAIN_DISK_TYPE_BLOCK:
|
||||
virBufferEscapeString(buf, " <source dev='%s'",
|
||||
def->src);
|
||||
if (def->startupPolicy)
|
||||
virBufferEscapeString(buf, " startupPolicy='%s'",
|
||||
startupPolicy);
|
||||
if (def->nseclabels) {
|
||||
virBufferAddLit(buf, ">\n");
|
||||
virBufferAdjustIndent(buf, 8);
|
||||
|
@ -14133,8 +14144,12 @@ virDomainDiskSourceDefFormat(virBufferPtr buf,
|
|||
}
|
||||
break;
|
||||
case VIR_DOMAIN_DISK_TYPE_DIR:
|
||||
virBufferEscapeString(buf, " <source dir='%s'/>\n",
|
||||
virBufferEscapeString(buf, " <source dir='%s'",
|
||||
def->src);
|
||||
if (def->startupPolicy)
|
||||
virBufferEscapeString(buf, " startupPolicy='%s'",
|
||||
startupPolicy);
|
||||
virBufferAddLit(buf, "/>\n");
|
||||
break;
|
||||
case VIR_DOMAIN_DISK_TYPE_NETWORK:
|
||||
virBufferAsprintf(buf, " <source protocol='%s'",
|
||||
|
|
Loading…
Reference in New Issue