mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
Compare commits
3 Commits
f529a1360d
...
96ca2b20ce
Author | SHA1 | Date | |
---|---|---|---|
|
96ca2b20ce | ||
|
a39dd25715 | ||
|
5138dd2478 |
@ -113,6 +113,28 @@ The following variables are supported:
|
||||
this requires guest agent with support for time synchronization
|
||||
running in the guest. By default, this functionality is turned off.
|
||||
|
||||
- PERSISTENT_ONLY=default
|
||||
|
||||
Defines what type of guest virtual machine ON_SHUTDOWN action is applied to
|
||||
|
||||
* default
|
||||
|
||||
This implements the already existing default behavior.
|
||||
If ON_SHUTDOWN action is shutdown, transient and persistent guest virtual
|
||||
machines are asked to shutdown.
|
||||
If ON_SHUTDOWN action is suspend, only persistent guest virtual machines
|
||||
are asked to suspend.
|
||||
|
||||
* true
|
||||
|
||||
ON_SHUTDOWN action is executed only on persistent guest virtual machines.
|
||||
Transient guest virtual machines are not affected.
|
||||
|
||||
* false
|
||||
|
||||
ON_SHUTDOWN action is executed on persistent and transient guest virtual
|
||||
machines.
|
||||
|
||||
|
||||
BUGS
|
||||
====
|
||||
|
@ -2894,9 +2894,9 @@ int
|
||||
virNodeDeviceGetSCSITargetCaps(const char *sysfsPath,
|
||||
virNodeDevCapSCSITarget *scsi_target)
|
||||
{
|
||||
int ret = -1;
|
||||
g_autofree char *dir = NULL;
|
||||
g_autofree char *rport = NULL;
|
||||
g_autofree char *wwpn = NULL;
|
||||
|
||||
VIR_DEBUG("Checking if '%s' is an FC remote port", scsi_target->name);
|
||||
|
||||
@ -2906,28 +2906,21 @@ virNodeDeviceGetSCSITargetCaps(const char *sysfsPath,
|
||||
rport = g_path_get_basename(dir);
|
||||
|
||||
if (!virFCIsCapableRport(rport))
|
||||
goto cleanup;
|
||||
return -1;
|
||||
|
||||
if (virFCReadRportValue(rport, "port_name",
|
||||
&wwpn) < 0) {
|
||||
VIR_WARN("Failed to read port_name for '%s'", rport);
|
||||
return -1;
|
||||
}
|
||||
|
||||
VIR_FREE(scsi_target->rport);
|
||||
scsi_target->rport = g_steal_pointer(&rport);
|
||||
|
||||
if (virFCReadRportValue(scsi_target->rport, "port_name",
|
||||
&scsi_target->wwpn) < 0) {
|
||||
VIR_WARN("Failed to read port_name for '%s'", scsi_target->rport);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
scsi_target->flags |= VIR_NODE_DEV_CAP_FLAG_FC_RPORT;
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
if (ret < 0) {
|
||||
VIR_FREE(scsi_target->rport);
|
||||
VIR_FREE(scsi_target->wwpn);
|
||||
scsi_target->flags &= ~VIR_NODE_DEV_CAP_FLAG_FC_RPORT;
|
||||
}
|
||||
|
||||
return ret;
|
||||
scsi_target->wwpn = g_steal_pointer(&wwpn);
|
||||
scsi_target->flags |= VIR_NODE_DEV_CAP_FLAG_FC_RPORT;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -38,6 +38,7 @@ PARALLEL_SHUTDOWN=0
|
||||
START_DELAY=0
|
||||
BYPASS_CACHE=0
|
||||
SYNC_TIME=0
|
||||
PERSISTENT_ONLY="default"
|
||||
|
||||
test -f "$initconfdir"/libvirt-guests &&
|
||||
. "$initconfdir"/libvirt-guests
|
||||
@ -438,14 +439,16 @@ shutdown_guests_parallel()
|
||||
# stop
|
||||
# Shutdown or save guests on the configured uris
|
||||
stop() {
|
||||
local suspending="true"
|
||||
local uri=
|
||||
local action="suspend"
|
||||
local persistent_only="default"
|
||||
|
||||
|
||||
# last stop was not followed by start
|
||||
[ -f "$LISTFILE" ] && return 0
|
||||
|
||||
if [ "x$ON_SHUTDOWN" = xshutdown ]; then
|
||||
suspending="false"
|
||||
action="shutdown"
|
||||
if [ $SHUTDOWN_TIMEOUT -lt 0 ]; then
|
||||
gettext "SHUTDOWN_TIMEOUT must be equal or greater than 0"
|
||||
echo
|
||||
@ -454,6 +457,22 @@ stop() {
|
||||
fi
|
||||
fi
|
||||
|
||||
case "x$PERSISTENT_ONLY" in
|
||||
xtrue)
|
||||
persistent_only="true"
|
||||
;;
|
||||
xfalse)
|
||||
persistent_only="false"
|
||||
;;
|
||||
*)
|
||||
if [ "x$action" = xshutdown ]; then
|
||||
persistent_only="false"
|
||||
elif [ "x$action" = xsuspend ]; then
|
||||
persistent_only="true"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
: >"$LISTFILE"
|
||||
set -f
|
||||
for uri in $URIS; do
|
||||
@ -478,7 +497,7 @@ stop() {
|
||||
echo
|
||||
fi
|
||||
|
||||
if "$suspending"; then
|
||||
if "$persistent_only"; then
|
||||
local transient="$(list_guests "$uri" "--transient")"
|
||||
if [ $? -eq 0 ]; then
|
||||
local empty="true"
|
||||
@ -486,7 +505,11 @@ stop() {
|
||||
|
||||
for uuid in $transient; do
|
||||
if "$empty"; then
|
||||
if [ "x$action" = xsuspend ]; then
|
||||
eval_gettext "Not suspending transient guests on URI: \$uri: "
|
||||
else
|
||||
eval_gettext "Not shutting down transient guests on URI: \$uri: "
|
||||
fi
|
||||
empty="false"
|
||||
else
|
||||
printf ", "
|
||||
@ -520,19 +543,19 @@ stop() {
|
||||
|
||||
if [ -s "$LISTFILE" ]; then
|
||||
while read uri list; do
|
||||
if "$suspending"; then
|
||||
if [ "x$action" = xsuspend ]; then
|
||||
eval_gettext "Suspending guests on \$uri URI..."; echo
|
||||
else
|
||||
eval_gettext "Shutting down guests on \$uri URI..."; echo
|
||||
fi
|
||||
|
||||
if [ "$PARALLEL_SHUTDOWN" -gt 1 ] &&
|
||||
! "$suspending"; then
|
||||
[ "x$action" = xshutdown ]; then
|
||||
shutdown_guests_parallel "$uri" "$list"
|
||||
else
|
||||
local guest=
|
||||
for guest in $list; do
|
||||
if "$suspending"; then
|
||||
if [ "x$action" = xsuspend ]; then
|
||||
suspend_guest "$uri" "$guest"
|
||||
else
|
||||
shutdown_guest "$uri" "$guest"
|
||||
|
Loading…
Reference in New Issue
Block a user