summaryrefslogtreecommitdiffstats
path: root/tools/crm_standby.in
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xtools/crm_standby.in158
1 files changed, 158 insertions, 0 deletions
diff --git a/tools/crm_standby.in b/tools/crm_standby.in
new file mode 100755
index 0000000..0911b9d
--- /dev/null
+++ b/tools/crm_standby.in
@@ -0,0 +1,158 @@
+#!@BASH_PATH@
+#
+# Copyright 2009-2018 the Pacemaker project contributors
+#
+# The version control history for this file may have further details.
+#
+# This source code is licensed under the GNU General Public License version 2
+# or later (GPLv2+) WITHOUT ANY WARRANTY.
+#
+
+USAGE_TEXT="Usage: crm_standby <command> [options]
+
+Common options:
+ --help Display this text, then exit
+ --version Display version information, then exit
+ -V, --verbose Specify multiple times to increase debug output
+ -q, --quiet Print only the standby status (if querying)
+
+Commands:
+ -G, --query Query the current value of standby mode (on/off)
+ -v, --update=VALUE Update the value of standby mode (on/off)
+ -D, --delete Let standby mode use default value
+
+Additional Options:
+ -N, --node=NODE Operate on the named node instead of the current one
+ -l, --lifetime=VALUE Until when should the setting take effect
+ (valid values: reboot, forever)
+ -i, --id=VALUE (Advanced) XML ID used to identify standby attribute"
+
+HELP_TEXT="crm_standby - Query, enable, or disable standby mode for a node
+
+Nodes in standby mode may not host cluster resources.
+
+$USAGE_TEXT
+"
+
+exit_usage() {
+ if [ $# -gt 0 ]; then
+ echo "error:" "$@" >&2
+ fi
+ echo
+ echo "$USAGE_TEXT"
+ exit 1
+}
+
+op=""
+options=""
+lifetime=0
+target=""
+
+SHORTOPTS_DEPRECATED="U:Q"
+LONGOPTS_DEPRECATED="uname:,get-value,delete-attr,attr-value:,attr-id:"
+SHORTOPTS="VqGv:DN:l:i:"
+LONGOPTS="help,version,verbose,quiet,query,update:,delete,node:,lifetime:,id:"
+
+TEMP=$(@GETOPT_PATH@ -o ${SHORTOPTS}${SHORTOPTS_DEPRECATED} \
+ --long ${LONGOPTS},${LONGOPTS_DEPRECATED} \
+ -n crm_standby -- "$@")
+if [ $? -ne 0 ]; then
+ exit_usage
+fi
+
+eval set -- "$TEMP" # Quotes around $TEMP are essential
+
+while true ; do
+ case "$1" in
+ --help)
+ echo "$HELP_TEXT"
+ exit 0
+ ;;
+ --version)
+ crm_attribute --version
+ exit 0
+ ;;
+ -q|--quiet|-V|--verbose|-Q)
+ options="$options $1"
+ shift
+ ;;
+ -N|--node|-U|--uname)
+ target="$2"
+ shift
+ shift
+ ;;
+ -G|--query|--get-value)
+ options="$options --query"
+ op=g
+ shift
+ ;;
+ -v|--update|--attr-value)
+ options="$options --update $2"
+ op=u
+ shift
+ shift
+ ;;
+ -D|--delete|--delete-attr)
+ options="$options --delete"
+ op=d
+ shift
+ ;;
+ -l|--lifetime)
+ options="$options --lifetime $2"
+ lifetime=1
+ shift
+ shift
+ ;;
+ -i|--id|--attr-id)
+ options="$options --id $2"
+ shift
+ shift
+ ;;
+ --)
+ shift
+ break
+ ;;
+ *)
+ exit_usage "unknown option '$1'"
+ ;;
+ esac
+done
+
+# It's important to call cluster commands only after arguments are processed,
+# so --version and --help work without problems even if those commands don't.
+if [ "$target" = "" ]; then
+ target=$(crm_node -n)
+fi
+
+options="-N $target -n standby $options"
+if [ x$op = x ]; then
+ options="$options -G"; op=g
+fi
+
+# If the user didn't explicitly specify a lifetime ...
+if [ $lifetime -eq 0 ]; then
+ case $op in
+ g)
+ # For query, report the forever entry if one exists, otherwise
+ # report the reboot entry if one exists, otherwise report off.
+ crm_attribute $options -l forever >/dev/null 2>&1
+ if [ $? -eq 0 ]; then
+ options="$options -l forever"
+ else
+ options="$options -l reboot -d off"
+ fi
+ ;;
+ u)
+ # For update, default to updating the forever entry.
+ options="$options -l forever"
+ ;;
+ d)
+ # For delete, default to deleting both forever and reboot entries.
+ crm_attribute $options -l forever
+ crm_attribute $options -l reboot
+ exit 0
+ ;;
+ esac
+fi
+
+crm_attribute $options