File xen-replace-xm-with-xl.patch of Package resource-agents
diff --git a/heartbeat/Xen b/heartbeat/Xen
index cbc7c37..6659169 100755
--- a/heartbeat/Xen
+++ b/heartbeat/Xen
@@ -6,7 +6,7 @@
#
# Resource Agent for the Xen Hypervisor.
# Manages Xen virtual machine instances by
-# mapping cluster resource start and stop,
+# mapping cluster resource start and stop,
# to Xen create and shutdown, respectively.
#
# usage: $0 {start|stop|status|monitor|meta-data}
@@ -32,11 +32,10 @@
#######################################################################
-
usage() {
- cat <<-!
+ cat <<-END
usage: $0 {start|stop|status|monitor|meta-data|validate-all}
- !
+ END
}
@@ -45,6 +44,9 @@ usage() {
: ${OCF_RESKEY_allow_mem_management=0}
: ${OCF_RESKEY_reserved_Dom0_memory=512}
+# prefer xl
+xentool=$(which xl 2> /dev/null || which xm)
+
meta_data() {
cat <<END
<?xml version="1.0"?>
@@ -95,9 +97,9 @@ Name of the virtual machine.
</parameter>
<parameter name="shutdown_timeout">
<longdesc lang="en">
-The Xen agent will first try an orderly shutdown using xm shutdown.
+The Xen agent will first try an orderly shutdown using xl shutdown.
Should this not succeed within this timeout, the agent will escalate to
-xm destroy, forcibly killing the node.
+xl destroy, forcibly killing the node.
If this is not set, it will default to two-third of the stop action
timeout.
@@ -119,7 +121,7 @@ without installed PV drivers.
</parameter>
<parameter name="allow_mem_management" unique="0" required="0">
<longdesc lang="en">
-This parameter enables dynamic adjustment of memory for start
+This parameter enables dynamic adjustment of memory for start
and stop actions used for Dom0 and the DomUs. The default is
to not adjust memory dynamically.
</longdesc>
@@ -187,30 +189,38 @@ Xen_Status() {
return $OCF_SUCCESS
fi
fi
- STATUS=`xm list --long $1 2>/dev/null | grep status 2>/dev/null`
+ if have_binary xenstore-ls; then
+ xenstore-ls -f /vm | grep -E "/vm.*name = \"$1\"" > /dev/null 2>&1
+ if [ $? -ne 0 ]; then
+ return $OCF_NOT_RUNNING
+ else
+ return $OCF_SUCCESS
+ fi
+ fi
+ STATUS=`$xentool list --long $1 2>/dev/null | grep status 2>/dev/null`
if [ "X${STATUS}" != "X" ]; then
# we have Xen 3.0.4 or higher
STATUS_NOSPACES=`echo "$STATUS" | awk '{ print $1,$2}'`
if [ "$STATUS_NOSPACES" = "(status 2)" -o "$STATUS_NOSPACES" = "(status 1)" ]; then
return $OCF_SUCCESS
- else
+ else
return $OCF_NOT_RUNNING
fi
else
# we have Xen 3.0.3 or lower
- STATUS=`xm list --long $1 2>/dev/null | grep state 2>/dev/null`
+ STATUS=`$xentool list --long $1 2>/dev/null | grep state 2>/dev/null`
echo "${STATUS}" | grep -qs "[-r][-b][-p]---"
if [ $? -ne 0 ]; then
return $OCF_NOT_RUNNING
else
return $OCF_SUCCESS
fi
-
+
fi
}
# If the guest is rebooting, it may completely disappear from the
-# list of defined guests, thus xm/xen-list would return with not
+# list of defined guests, thus xl/xen-list would return with not
# running; apparently, this period lasts only for a second or
# two
# If a status returns not running, then test status
@@ -251,16 +261,16 @@ Xen_Adjust_Memory() {
#NEWMEM=`echo "(${MAXMEM}-${OCF_RESKEY_reserved_Dom0_memory})/(${RUNCNT}+${CNTNEW})"|bc`
NEWMEM=$(( (${MAXMEM} - ${OCF_RESKEY_reserved_Dom0_memory}) / (${RUNCNT} + ${CNTNEW} ) ))
# do not rely on ballooning add dom0_mem=512 instead to force memory for dom0
- #xm mem-set Domain-0 ${OCF_RESKEY_reserved_Dom0_memory}
+ #$xentool mem-set Domain-0 ${OCF_RESKEY_reserved_Dom0_memory}
for DOM in ${RUNNING}; do
- xm mem-set ${DOM} ${NEWMEM}
+ $xentool mem-set ${DOM} ${NEWMEM}
done
ocf_log info "Adjusted memory to: $NEWMEM, for the following $RUNCNT domains: $RUNNING"
fi
}
Xen_List_all() {
- xm list | grep -v -e "Name" -e "Domain-0" | awk '{print $1}'
+ $xentool list | grep -v -e "Name" -e "Domain-0" | awk '{print $1}'
}
Xen_List_running() {
ALL_DOMS=`Xen_List_all`
@@ -298,7 +308,7 @@ Xen_Monitor() {
}
Xen_Total_Memory() {
- xm info | grep "^total_memory" | awk '{print $3}'
+ $xentool info | grep "^total_memory" | awk '{print $3}'
}
Xen_Start() {
@@ -316,16 +326,16 @@ Xen_Start() {
Xen_Adjust_Memory 1
ocf_log info "New memory for virtual domains: ${NEWMEM}"
sed -i -e "/^memory=/ s/^memory=.*/memory=${NEWMEM}/" ${OCF_RESKEY_xmfile}
- xm mem-set ${DOMAIN_NAME} ${NEWMEM}
+ $xentool mem-set ${DOMAIN_NAME} ${NEWMEM}
fi
- xm create ${OCF_RESKEY_xmfile} name=$DOMAIN_NAME
+ $xentool create ${OCF_RESKEY_xmfile} name=\"$DOMAIN_NAME\"
rc=$?
if [ $rc -ne 0 ]; then
return $OCF_ERR_GENERIC
- else
+ else
if ocf_is_true "${OCF_RESKEY_allow_mem_management}"; then
- xm mem-set ${DOMAIN_NAME} ${NEWMEM}
+ $xentool mem-set ${DOMAIN_NAME} ${NEWMEM}
fi
fi
while sleep 1; do
@@ -350,18 +360,18 @@ xen_domain_stop() {
if [ "$timeout" -gt 0 ]; then
ocf_log info "Xen domain $dom will be stopped (timeout: ${timeout}s)"
if ocf_is_true "${OCF_RESKEY_shutdown_acpi}"; then
- xm trigger $dom power
+ $xentool trigger $dom power
else
- xm shutdown $dom
+ $xentool shutdown $dom
fi
-
+
while Xen_Status $dom && [ "$timeout" -gt 0 ]; do
ocf_log debug "$dom still not stopped. Waiting..."
timeout=$((timeout-1))
sleep 1
done
fi
-
+
if [ "$timeout" -eq 0 ]; then
while Xen_Status $dom; do
ocf_log warn "Xen domain $dom will be destroyed!"
@@ -369,7 +379,7 @@ xen_domain_stop() {
sleep 1
done
# Note: This does not give up. stop isn't allowed to to fail.
- # If xm destroy fails, stop will eventually timeout.
+ # If $xentool destroy fails, stop will eventually timeout.
# This is the correct behaviour.
fi
@@ -381,18 +391,18 @@ Xen_Stop() {
if Xen_Status_with_Retry ${DOMAIN_NAME}; then
vm=${DOMAIN_NAME}
elif Xen_Status migrating-${DOMAIN_NAME}; then
- ocf_log info "Xen domain $DOMAIN_NAME is migrating"
+ ocf_log info "Xen domain $DOMAIN_NAME is migrating"
vm="migrating-${DOMAIN_NAME}"
else
- ocf_log info "Xen domain $DOMAIN_NAME already stopped."
+ ocf_log info "Xen domain $DOMAIN_NAME already stopped."
fi
if [ "$vm" ]; then
xen_domain_stop $vm
else
- # It is supposed to be gone, but there have been situations where xm
- # list / xen-list showed it as stopped but it was still instantiated.
- # Nuke it once more to make sure:
+ # It is supposed to be gone, but there have been situations where
+ # $xentool list / xen-list showed it as stopped but it was still
+ # instantiated. Nuke it once more to make sure:
$xenkill ${DOMAIN_NAME}
fi
@@ -404,10 +414,10 @@ Xen_Migrate_To() {
target_node="$OCF_RESKEY_CRM_meta_migrate_target"
target_attr="$OCF_RESKEY_node_ip_attribute"
target_addr="$target_node"
-
+
if Xen_Status ${DOMAIN_NAME}; then
- ocf_log info "$DOMAIN_NAME: Starting xm migrate to $target_node"
-
+ ocf_log info "$DOMAIN_NAME: Starting $xentool migrate to $target_node"
+
if [ -n "$target_attr" ]; then
nodevalue=`crm_attribute --type nodes --node-uname $target_node --attr-name $target_attr --get-value -q`
if [ -n "${nodevalue}" -a "${nodevalue}" != "(null)" ]; then
@@ -416,15 +426,18 @@ Xen_Migrate_To() {
fi
fi
- xm migrate --live $DOMAIN_NAME $target_addr
-
+ if [[ "$xentool" == *xm ]]; then
+ $xentool migrate --live $DOMAIN_NAME $target_addr
+ else
+ $xentool migrate $DOMAIN_NAME $target_addr
+ fi
rc=$?
if [ $rc -ne 0 ]; then
- ocf_log err "$DOMAIN_NAME: xm migrate to $target_node failed: $rc"
+ ocf_log err "$DOMAIN_NAME: $xentool migrate to $target_node failed: $rc"
return $OCF_ERR_GENERIC
- else
+ else
Xen_Adjust_Memory 0
- ocf_log info "$DOMAIN_NAME: xm migrate to $target_node succeeded."
+ ocf_log info "$DOMAIN_NAME: $xentool migrate to $target_node succeeded."
return $OCF_SUCCESS
fi
else
@@ -495,19 +508,19 @@ else
DOMAIN_NAME=${DOMAIN_NAME:-${OCF_RESOURCE_INSTANCE}}
fi
-for binary in xm sed awk; do
+for binary in sed awk; do
check_binary $binary
done
if have_binary xen-destroy ; then
xenkill="xen-destroy"
else
- xenkill="xm destroy"
+ xenkill="$xentool destroy"
fi
if [ -n "$OCF_RESKEY_shutdown_timeout" ]; then
ocf_is_decimal "$OCF_RESKEY_shutdown_timeout" || {
- ocf_log err "shutdown_timeout must be a number"
+ ocf_log err "shutdown_timeout must be a number"
exit $OCF_ERR_CONFIGURED
}
fi