From ba359c4f75c55f386827c6bef0fca8a992b41e2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gardais=20J=C3=A9r=C3=A9my?= Date: Thu, 11 Mar 2021 14:50:25 +0100 Subject: [PATCH] Exit if sge_qmaster host is not reachable --- cluster/apt.apply.update.sh | 38 +++++++++++++++++++++++++++++++ cluster/apt.check.update.sh | 37 ++++++++++++++++++++++++++++++ cluster/maco.apply.update.sh | 37 ++++++++++++++++++++++++++++++ cluster/maco.check.update.sh | 36 +++++++++++++++++++++++++++++ cluster/sge.disable.host.queue.sh | 37 ++++++++++++++++++++++++++++++ cluster/sge.enable.host.queue.sh | 37 ++++++++++++++++++++++++++++++ 6 files changed, 222 insertions(+) diff --git a/cluster/apt.apply.update.sh b/cluster/apt.apply.update.sh index 6d189f5..ca77920 100755 --- a/cluster/apt.apply.update.sh +++ b/cluster/apt.apply.update.sh @@ -151,6 +151,25 @@ state is: ${RED}${local_sge_queue_state:=/dev/null}${COLOR_DEBUG}." return "${return_queue_enable}" +} +# }}} +is_sge_master_available() { # {{{ + + ## Check with Netcat if SGE master (sge_qmaster) is reachable from this host. + ### -z: Only scan for listening daemons, without sending any data to them. + ### -w 10: Timeout the test after 10 seconds. + if nc -z -w 10 "${sge_master_uri}" "${sge_master_port}"; then + return_is_sge_master_available="0" + debug_message "is_sge_master_available − \ +SGE Master (${sge_master_uri}:${sge_master_port}) is reachable from this host." + else + return_is_sge_master_available="1" + debug_message "is_sge_master_available − \ +SGE Master (${sge_master_uri}:${sge_master_port}) is not reachable from this host." + fi + + return "${return_is_sge_master_available}" + } # }}} is_any_queue_enable() { # {{{ @@ -269,13 +288,32 @@ main() { # {{{ manage_args "${ARGS}" + ## Define vars sge_hostname="$(hostname -f)" sge_queues_name="$(qhost -h "${sge_hostname:=/dev/null}" -q -xml \ | grep "queue name" \ | cut -d"'" -f2 )" + ## If sge_master_uri wasn't defined (environment variable,…) + if [ -z "${sge_master_uri}" ]; then + ## Use local host for sge_master_uri + sge_master_uri="physix-master.ipr.univ-rennes1.fr" + fi + + ## If sge_master_port wasn't defined (environment variable,…) + if [ -z "${sge_master_port}" ]; then + ## Use local host for sge_master_port + sge_master_port="6444" + fi + maco_proc_pattern="(/opt/maco/bin/maco.autoupdate.sh)" + ## If SGE Master is not reachable from this host {{{ + ### Exit + is_sge_master_available \ + || exit 0 + ## }}} + ## If NO APT package upgrade is available ### Exit is_apt_upgrade_absent \ diff --git a/cluster/apt.check.update.sh b/cluster/apt.check.update.sh index ec5e390..1ee76a5 100755 --- a/cluster/apt.check.update.sh +++ b/cluster/apt.check.update.sh @@ -70,6 +70,18 @@ define_vars() { # {{{ sge_hostname="$(hostname -f)" fi + ## If sge_master_uri wasn't defined (environment variable,…) + if [ -z "${sge_master_uri}" ]; then + ## Use local host for sge_master_uri + sge_master_uri="physix-master.ipr.univ-rennes1.fr" + fi + + ## If sge_master_port wasn't defined (environment variable,…) + if [ -z "${sge_master_port}" ]; then + ## Use local host for sge_master_port + sge_master_port="6444" + fi + ## If EMPTY_ONLY_MODE wasn't defined (argument, environment variable,…) if [ -z "${EMPTY_ONLY_MODE}" ]; then ### Set False by default @@ -101,6 +113,25 @@ SGE is not present on this host." return "${return_is_sge_host}" +} +# }}} +is_sge_master_available() { # {{{ + + ## Check with Netcat if SGE master (sge_qmaster) is reachable from this host. + ### -z: Only scan for listening daemons, without sending any data to them. + ### -w 10: Timeout the test after 10 seconds. + if nc -z -w 10 "${sge_master_uri}" "${sge_master_port}"; then + return_is_sge_master_available="0" + debug_message "is_sge_master_available − \ +SGE Master (${sge_master_uri}:${sge_master_port}) is reachable from this host." + else + return_is_sge_master_available="1" + debug_message "is_sge_master_available − \ +SGE Master (${sge_master_uri}:${sge_master_port}) is not reachable from this host." + fi + + return "${return_is_sge_master_available}" + } # }}} is_apt_upgrade_absent() { # {{{ @@ -179,6 +210,12 @@ main() { # {{{ ## Define all vars define_vars + ## If SGE Master is not reachable from this host {{{ + ### Exit + is_sge_master_available \ + || exit 0 + ## }}} + ## If NO APT package upgrade is available {{{ ### Ensure to remove any temp file related to APT upgrades ### AND Exit diff --git a/cluster/maco.apply.update.sh b/cluster/maco.apply.update.sh index ff9937d..00f9133 100755 --- a/cluster/maco.apply.update.sh +++ b/cluster/maco.apply.update.sh @@ -88,6 +88,25 @@ SGE is not present on this host." return "${return_is_sge_host}" +} +# }}} +is_sge_master_available() { # {{{ + + ## Check with Netcat if SGE master (sge_qmaster) is reachable from this host. + ### -z: Only scan for listening daemons, without sending any data to them. + ### -w 10: Timeout the test after 10 seconds. + if nc -z -w 10 "${sge_master_uri}" "${sge_master_port}"; then + return_is_sge_master_available="0" + debug_message "is_sge_master_available − \ +SGE Master (${sge_master_uri}:${sge_master_port}) is reachable from this host." + else + return_is_sge_master_available="1" + debug_message "is_sge_master_available − \ +SGE Master (${sge_master_uri}:${sge_master_port}) is not reachable from this host." + fi + + return "${return_is_sge_master_available}" + } # }}} is_apt_upgrade_present() { # {{{ @@ -274,6 +293,24 @@ main() { # {{{ maco_proc_pattern="(/opt/maco/bin/maco.autoupdate.sh)" apt_proc_pattern="(aptitude.*full-upgrade|/usr/bin/dpkg.*--configure|dpkg-deb|/bin/sh /usr/lib/needrestart/dpkg-status)" + ## If sge_master_uri wasn't defined (environment variable,…) + if [ -z "${sge_master_uri}" ]; then + ## Use local host for sge_master_uri + sge_master_uri="physix-master.ipr.univ-rennes1.fr" + fi + + ## If sge_master_port wasn't defined (environment variable,…) + if [ -z "${sge_master_port}" ]; then + ## Use local host for sge_master_port + sge_master_port="6444" + fi + + ## If SGE Master is not reachable from this host {{{ + ### Exit + is_sge_master_available \ + || exit 0 + ## }}} + ## If APT package upgrade is available ### Exit (wait for APT upgrade to be applied first) is_apt_upgrade_present \ diff --git a/cluster/maco.check.update.sh b/cluster/maco.check.update.sh index 3d9d7c5..05f977f 100755 --- a/cluster/maco.check.update.sh +++ b/cluster/maco.check.update.sh @@ -124,6 +124,25 @@ Test var: ${1}." return "${return_var_empty}" +} +# }}} +is_sge_master_available() { # {{{ + + ## Check with Netcat if SGE master (sge_qmaster) is reachable from this host. + ### -z: Only scan for listening daemons, without sending any data to them. + ### -w 10: Timeout the test after 10 seconds. + if nc -z -w 10 "${sge_master_uri}" "${sge_master_port}"; then + return_is_sge_master_available="0" + debug_message "is_sge_master_available − \ +SGE Master (${sge_master_uri}:${sge_master_port}) is reachable from this host." + else + return_is_sge_master_available="1" + debug_message "is_sge_master_available − \ +SGE Master (${sge_master_uri}:${sge_master_port}) is not reachable from this host." + fi + + return "${return_is_sge_master_available}" + } # }}} is_maco_urgent_upgrade_require() { # {{{ @@ -234,6 +253,23 @@ Disable SGE queue." # }}} main() { # {{{ + ## If sge_master_uri wasn't defined (environment variable,…) + if [ -z "${sge_master_uri}" ]; then + ## Use local host for sge_master_uri + sge_master_uri="physix-master.ipr.univ-rennes1.fr" + fi + + ## If sge_master_port wasn't defined (environment variable,…) + if [ -z "${sge_master_port}" ]; then + ## Use local host for sge_master_port + sge_master_port="6444" + fi + ## If SGE Master is not reachable from this host {{{ + ### Exit + is_sge_master_available \ + || exit 0 + ## }}} + ## Get all Maco's versions (date) readonly CURRENT_MACO_VERSION=$(< "${MACO_LOCAL_DIR}/maco-version.txt" awk -v FS=. '{ print $1 "-" $2 "-" $3 "T" $4 ":" $5 ":" $6 }' ) readonly LATEST_MACO_VERSION=$(< "${MACO_INSTALL_DIR}/maco-version.txt" awk -v FS=. '{ print $1 "-" $2 "-" $3 "T" $4 ":" $5 ":" $6 }' ) diff --git a/cluster/sge.disable.host.queue.sh b/cluster/sge.disable.host.queue.sh index 8e0daba..3d6c5e0 100755 --- a/cluster/sge.disable.host.queue.sh +++ b/cluster/sge.disable.host.queue.sh @@ -62,6 +62,18 @@ define_vars() { # {{{ sge_hostname="$(hostname -f)" fi + ## If sge_master_uri wasn't defined (environment variable,…) + if [ -z "${sge_master_uri}" ]; then + ## Use local host for sge_master_uri + sge_master_uri="physix-master.ipr.univ-rennes1.fr" + fi + + ## If sge_master_port wasn't defined (environment variable,…) + if [ -z "${sge_master_port}" ]; then + ## Use local host for sge_master_port + sge_master_port="6444" + fi + ## If the host to manage is the current one if is_current_host "${sge_hostname}" ; then debug_message "define_vars − \ @@ -82,6 +94,25 @@ ${sge_hostname} is not the current host." | cut -d"'" -f2 \ | tr -s '\n' ' ' )" +} +# }}} +is_sge_master_available() { # {{{ + + ## Check with Netcat if SGE master (sge_qmaster) is reachable from this host. + ### -z: Only scan for listening daemons, without sending any data to them. + ### -w 10: Timeout the test after 10 seconds. + if nc -z -w 10 "${sge_master_uri}" "${sge_master_port}"; then + return_is_sge_master_available="0" + debug_message "is_sge_master_available − \ +SGE Master (${sge_master_uri}:${sge_master_port}) is reachable from this host." + else + return_is_sge_master_available="1" + debug_message "is_sge_master_available − \ +SGE Master (${sge_master_uri}:${sge_master_port}) is not reachable from this host." + fi + + return "${return_is_sge_master_available}" + } # }}} is_current_host() { # {{{ @@ -218,6 +249,12 @@ main() { # {{{ ## Define all vars according the selected options define_vars + ## If SGE Master is not reachable from this host {{{ + ### Exit + is_sge_master_available \ + || exit 0 + ## }}} + ## Simple debug message with color to valid current variables debug_message "main − Try to manage \ SGE queue(s): ${RED}${sge_queues_name_print:=/dev/null}${COLOR_DEBUG}\ diff --git a/cluster/sge.enable.host.queue.sh b/cluster/sge.enable.host.queue.sh index 3efb200..aad72de 100755 --- a/cluster/sge.enable.host.queue.sh +++ b/cluster/sge.enable.host.queue.sh @@ -97,6 +97,18 @@ define_vars() { # {{{ sge_hostname="$(hostname -f)" fi + ## If sge_master_uri wasn't defined (environment variable,…) + if [ -z "${sge_master_uri}" ]; then + ## Use local host for sge_master_uri + sge_master_uri="physix-master.ipr.univ-rennes1.fr" + fi + + ## If sge_master_port wasn't defined (environment variable,…) + if [ -z "${sge_master_port}" ]; then + ## Use local host for sge_master_port + sge_master_port="6444" + fi + ## If the host to manage is the current one if is_current_host "${sge_hostname}" ; then debug_message "define_vars − \ @@ -162,6 +174,25 @@ SGE is not present on this host." return "${return_is_sge_host}" +} +# }}} +is_sge_master_available() { # {{{ + + ## Check with Netcat if SGE master (sge_qmaster) is reachable from this host. + ### -z: Only scan for listening daemons, without sending any data to them. + ### -w 10: Timeout the test after 10 seconds. + if nc -z -w 10 "${sge_master_uri}" "${sge_master_port}"; then + return_is_sge_master_available="0" + debug_message "is_sge_master_available − \ +SGE Master (${sge_master_uri}:${sge_master_port}) is reachable from this host." + else + return_is_sge_master_available="1" + debug_message "is_sge_master_available − \ +SGE Master (${sge_master_uri}:${sge_master_port}) is not reachable from this host." + fi + + return "${return_is_sge_master_available}" + } # }}} is_current_host() { # {{{ @@ -450,6 +481,12 @@ main() { # {{{ ## Define all vars according the selected options define_vars + ## If SGE Master is not reachable from this host {{{ + ### Exit + is_sge_master_available \ + || exit 0 + ## }}} + ## If we need to watch for upgrades if [ "${CHECK_UPGRADE}" -eq "0" ]; then ## If APT package upgrade is available