diff --git a/tools/crm_standby b/tools/crm_standby index 25bff79ce4..59e16f8232 100755 --- a/tools/crm_standby +++ b/tools/crm_standby @@ -1,119 +1,150 @@ #!/bin/bash USAGE_TEXT="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: -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="" -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' -- "$@") - +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 -o ${SHORTOPTS}${SHORTOPTS_DEPRECATED} \ + --long ${LONGOPTS},${LONGOPTS_DEPRECATED} \ + -n crm_standby -- "$@") if [ $? -ne 0 ]; then exit_usage fi -# The quotes around $TEMP are essential! -eval set -- "$TEMP" +eval set -- "$TEMP" # Quotes around $TEMP are essential 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;; --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 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