Add --force option to force to enable a queue

This commit is contained in:
Jeremy Gardais 2020-06-22 17:12:14 +02:00
parent 2ac0de9343
commit 4535850b3a
Signed by: jegardai
GPG Key ID: E759BAA22501AF32
1 changed files with 31 additions and 13 deletions

View File

@ -11,6 +11,9 @@ readonly NBARGS="${#}"
# If output message should be displayed # If output message should be displayed
[ -z "${OUTPUT_MESSAGE}" ] && OUTPUT_MESSAGE=0 [ -z "${OUTPUT_MESSAGE}" ] && OUTPUT_MESSAGE=0
# If SGE queues should be re-enable even if disabled manually (by a user)
[ -z "${FORCE_MODE}" ] && FORCE_MODE=1
# Maco temp file # Maco temp file
readonly MACO_TMP_FILE="/tmp/.maco.upgrade" readonly MACO_TMP_FILE="/tmp/.maco.upgrade"
readonly MACO_TMP_URGENT_FILE="/tmp/.maco.urgent.upgrade" readonly MACO_TMP_URGENT_FILE="/tmp/.maco.urgent.upgrade"
@ -31,7 +34,7 @@ readonly COLOR_DEBUG="${PURPLE}"
usage() { # {{{ usage() { # {{{
cat <<- EOF cat <<- EOF
usage: $PROGNAME [--help] [-d|-h|-q] [hostname] usage: $PROGNAME [--help] [-d|-f|-h|-q] [hostname]
Try to enable all SGE queues of the current host (default), Try to enable all SGE queues of the current host (default),
if no pending upgrades (Maco, APT) are present, if no pending upgrades (Maco, APT) are present,
@ -49,6 +52,10 @@ OPTIONS:
-d,--debug -d,--debug
Enable debug messages. Enable debug messages.
-f,--force
Force to (re)enable a queue even if it was
previously manually disabled (by a user).
--help --help
Print this help message. Print this help message.
@ -58,7 +65,7 @@ OPTIONS:
-q,--quiet -q,--quiet
Disable messages on standard output (except for error). Disable messages on standard output (except for error).
EOF EOF
} }
# }}} # }}}
@ -181,6 +188,9 @@ is_queue_disable() { # {{{
0 ) ## No result so the queue is enable 0 ) ## No result so the queue is enable
local_sge_queue_state="enable" local_sge_queue_state="enable"
return_queue_disable="1" return_queue_disable="1"
## Ensure to remove any previously setted file
rm -f -- "${sge_queue_deactivator}"
;; ;;
3 ) ## Results (header + queue name) so the queue is disable 3 ) ## Results (header + queue name) so the queue is disable
local_sge_queue_state="disable" local_sge_queue_state="disable"
@ -228,17 +238,15 @@ enable_sge_queue() { # {{{
local_sge_hostname="${1}" local_sge_hostname="${1}"
local_sge_queue_name="${2}" local_sge_queue_name="${2}"
local_sge_disable="/etc/.sge.${local_sge_queue_name}.disable" ## If the queue was previously disabled by another script OR if FORCE_MODE is enable
if [ -f "${sge_queue_deactivator}" ] || [ "${FORCE_MODE}" -eq "0" ]; then
## If the queue was previously disabled by another script
if [ -f "${local_sge_disable}" ]; then
debug_message "enable_sge_queue \ debug_message "enable_sge_queue \
Try to enable SGE queue: ${RED}${local_sge_queue_name:=/dev/null}@${local_sge_hostname:=/dev/null}${COLOR_DEBUG}." Previously disabled by a script (or FORCE is enable), try to enable SGE queue: ${RED}${local_sge_queue_name:=/dev/null}@${local_sge_hostname:=/dev/null}${COLOR_DEBUG}."
## SGE command to enable the queue ## SGE command to enable the queue
qmod --enable "${local_sge_queue_name}@${local_sge_hostname}" \ qmod --enable "${local_sge_queue_name}@${local_sge_hostname}" \
&& return_enable_queue="${?}" && return_enable_queue="${?}"
else else
message "SGE queue: ${RED}${local_sge_queue_name:=/dev/null}@${local_sge_hostname:=/dev/null}${RESET} was manually disabled, please re-enable it ${RED}manually${RESET}." message "SGE queue: ${RED}${local_sge_queue_name:=/dev/null}@${local_sge_hostname:=/dev/null}${RESET} was manually disabled, please re-enable it ${RED}manually${RESET} (or use --force option)."
return_enable_queue="1" return_enable_queue="1"
fi fi
@ -281,16 +289,23 @@ for host: ${RED}${sge_hostname:=/dev/null}${COLOR_DEBUG}."
## Test all queues one by one ## Test all queues one by one
for loop_queue in ${sge_queues_name}; do for loop_queue in ${sge_queues_name}; do
## File previously set if the queue was disabled by a script
## "automatically disabled" for an upgrade
sge_queue_deactivator="/etc/.sge.${local_sge_queue_name}.disable"
## If the queue is disable ## If the queue is disable
### Try to enable it ### Try to enable it
is_queue_disable "${sge_hostname}" "${loop_queue}" \ is_queue_disable "${sge_hostname}" "${loop_queue}" \
&& enable_sge_queue "${sge_hostname}" "${loop_queue}" && enable_sge_queue "${sge_hostname}" "${loop_queue}"
## If the queue is still disable ## Don't consider manually disabled queue as an error except if FORCE_MODE was specified
### Exit with error if [ -f "${sge_queue_deactivator}" ] || [ "${FORCE_MODE}" -eq "0" ]; then
is_queue_disable "${sge_hostname}" "${loop_queue}" \ ## If the queue is still disable
&& printf '%b\n' "${RED}ERROR ${loop_queue}@${sge_hostname} is still disable.${RESET}" \ ### Exit with error
&& exit 4 is_queue_disable "${sge_hostname}" "${loop_queue}" \
&& printf '%b\n' "${RED}ERROR ${loop_queue}@${sge_hostname} is still disable.${RESET}" \
&& exit 4
fi
done done
@ -328,6 +343,9 @@ if [ ! "${NBARGS}" -eq "0" ]; then
-d|--debug ) ## debug -d|--debug ) ## debug
DEBUG=0 DEBUG=0
;; ;;
-f|--force ) ## Force to enable SGE queue
FORCE_MODE=0
;;
--help ) ## help --help ) ## help
usage usage
## Exit after help informations ## Exit after help informations