diff --git a/tools/crm_standby b/tools/crm_standby index 0b30eb6508..25bff79ce4 100755 --- a/tools/crm_standby +++ b/tools/crm_standby @@ -1,96 +1,119 @@ #!/bin/bash -HELPTEXT="crm_standby - convenience wrapper for crm_attribute +USAGE_TEXT="Usage: crm_standby [options] -Check, enable or disable standby mode for a cluster node. -Nodes in standby mode may not host cluster resources. - -Usage: crm_standby [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: - --help Display this text and exit - --version Display version information and exit - -G, --query Display the current value of standby mode (on/off) - -v, --update= Update the value of standby mode (on/off) + -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 -Options: - -V, --verbose Increase debug output (may be specified multiple times) - -q, --quiet Print nothing on stdout except the standby status - -N, --node= Operate on the named node instead of the current one - -l, --lifetime= Until when the setting should take effect (reboot/forever) - -i, --id= (Advanced) ID used to identify the XML attribute" +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="" BACKWARD_COMPATIBLE="get-value,attr-value:,delete-attr,uname:,attr-id:" TEMP=$(getopt -o qDGQVN:U:v:i:l: \ --long help,version,query,update:,delete,verbose,quiet,node:,lifetime:,id:,$BACKWARD_COMPATIBLE \ -n 'crm_standby' -- "$@") if [ $? -ne 0 ]; then - echo - echo "$HELPTEXT" - exit 1 + exit_usage fi # The quotes around $TEMP are essential! eval set -- "$TEMP" while true ; do case "$1" in -N|--node|-U|--uname) target="$2"; shift 2;; -G|--query|--get-value) options="$options --query"; op=g; shift;; -v|--update|--attr-value) options="$options --update $2"; op=u; shift 2;; -D|--delete|--delete-attr) options="$options --delete"; op=d; shift;; -l|--lifetime) options="$options --lifetime $2"; lifetime=1; shift 2;; -i|--id|--attr-id) options="$options --id $2"; shift 2;; -q|-Q|--quiet|-V|--verbose) options="$options $1"; shift;; - --version) crm_attribute --version; exit 0;; - --help) echo "$HELPTEXT"; exit 0;; - --) shift ; break ;; - *) echo "crm_standby: unrecognized option '$1'"; echo; echo "$HELPTEXT"; exit 1;; + --help) + echo "$HELP_TEXT" + exit 0 + ;; + --version) + crm_attribute --version + exit 0 + ;; + --) + 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 2>&1 > /dev/null 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