mirror of https://gitee.com/openkylin/libvirt.git
Add support for reboot-timeout
Whenever the guest machine fails to boot, new parameter (reboot-timeout) controls whether it should reboot and after how many ms it should do so. Docs included.
This commit is contained in:
parent
ede89aab64
commit
c33a922faa
|
@ -105,7 +105,7 @@
|
|||
<boot dev='cdrom'/>
|
||||
<bootmenu enable='yes'/>
|
||||
<smbios mode='sysinfo'/>
|
||||
<bios useserial='yes'/>
|
||||
<bios useserial='yes' rebootTimeout='0'/>
|
||||
</os>
|
||||
...</pre>
|
||||
|
||||
|
@ -175,8 +175,13 @@
|
|||
Serial Graphics Adapter which allows users to see BIOS messages
|
||||
on a serial port. Therefore, one needs to have
|
||||
<a href="#elementCharSerial">serial port</a> defined.
|
||||
<span class="since">Since 0.9.4</span>
|
||||
</dd>
|
||||
<span class="since">Since 0.9.4</span>.
|
||||
<span class="since">Since 0.10.2 (QEMU only)</span> there is
|
||||
another attribute, <code>rebootTimeout</code> that controls
|
||||
whether and after how long the guest should start booting
|
||||
again in case the boot fails (according to BIOS). The value is
|
||||
in milliseconds with maximum of <code>65535</code> and special
|
||||
value <code>-1</code> disables the reboot.
|
||||
</dl>
|
||||
|
||||
<h4><a name="elementsOSBootloader">Host bootloader</a></h4>
|
||||
|
|
|
@ -3190,12 +3190,19 @@
|
|||
|
||||
<define name="bios">
|
||||
<element name="bios">
|
||||
<attribute name="useserial">
|
||||
<choice>
|
||||
<value>yes</value>
|
||||
<value>no</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
<optional>
|
||||
<attribute name="useserial">
|
||||
<choice>
|
||||
<value>yes</value>
|
||||
<value>no</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="rebootTimeout">
|
||||
<ref name="rebootTimeoutDelay"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
|
@ -3469,6 +3476,11 @@
|
|||
<param name='minInclusive'>-1</param>
|
||||
</data>
|
||||
</define>
|
||||
<define name="rebootTimeoutDelay">
|
||||
<data type="short">
|
||||
<param name="minInclusive">-1</param>
|
||||
</data>
|
||||
</define>
|
||||
<define name="PortNumber">
|
||||
<data type="short">
|
||||
<param name="minInclusive">-1</param>
|
||||
|
|
|
@ -8136,7 +8136,7 @@ virDomainDefParseBootXML(xmlXPathContextPtr ctxt,
|
|||
{
|
||||
xmlNodePtr *nodes = NULL;
|
||||
int i, n;
|
||||
char *bootstr;
|
||||
char *bootstr, *tmp;
|
||||
char *useserial = NULL;
|
||||
int ret = -1;
|
||||
unsigned long deviceBoot, serialPorts;
|
||||
|
@ -8214,10 +8214,25 @@ virDomainDefParseBootXML(xmlXPathContextPtr ctxt,
|
|||
}
|
||||
}
|
||||
|
||||
tmp = virXPathString("string(./os/bios[1]/@rebootTimeout)", ctxt);
|
||||
if (tmp) {
|
||||
/* that was really just for the check if it is there */
|
||||
|
||||
if (virStrToLong_i(tmp, NULL, 0, &def->os.bios.rt_delay) < 0 ||
|
||||
def->os.bios.rt_delay < -1 || def->os.bios.rt_delay > 65535) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("invalid value for rebootTimeout, "
|
||||
"must be in range [-1,65535]"));
|
||||
goto cleanup;
|
||||
}
|
||||
def->os.bios.rt_set = true;
|
||||
}
|
||||
|
||||
*bootCount = deviceBoot;
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(tmp);
|
||||
VIR_FREE(useserial);
|
||||
VIR_FREE(nodes);
|
||||
return ret;
|
||||
|
@ -13494,11 +13509,17 @@ virDomainDefFormatInternal(virDomainDefPtr def,
|
|||
virBufferAsprintf(buf, " <bootmenu enable='%s'/>\n", enabled);
|
||||
}
|
||||
|
||||
if (def->os.bios.useserial) {
|
||||
const char *useserial = (def->os.bios.useserial ==
|
||||
VIR_DOMAIN_BIOS_USESERIAL_YES ? "yes"
|
||||
: "no");
|
||||
virBufferAsprintf(buf, " <bios useserial='%s'/>\n", useserial);
|
||||
if (def->os.bios.useserial || def->os.bios.rt_set) {
|
||||
virBufferAddLit(buf, " <bios");
|
||||
if (def->os.bios.useserial)
|
||||
virBufferAsprintf(buf, " useserial='%s'",
|
||||
(def->os.bios.useserial ==
|
||||
VIR_DOMAIN_BIOS_USESERIAL_YES ? "yes"
|
||||
: "no"));
|
||||
if (def->os.bios.rt_set)
|
||||
virBufferAsprintf(buf, " rebootTimeout='%d'", def->os.bios.rt_delay);
|
||||
|
||||
virBufferAddLit(buf, "/>\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1420,6 +1420,9 @@ typedef struct _virDomainBIOSDef virDomainBIOSDef;
|
|||
typedef virDomainBIOSDef *virDomainBIOSDefPtr;
|
||||
struct _virDomainBIOSDef {
|
||||
int useserial;
|
||||
/* reboot-timeout parameters */
|
||||
bool rt_set;
|
||||
int rt_delay;
|
||||
};
|
||||
|
||||
/* Operating system configuration data & machine / arch */
|
||||
|
|
Loading…
Reference in New Issue