diff --git a/script/ocf/booth-site b/script/ocf/booth-site index 809928c..8178e35 100755 --- a/script/ocf/booth-site +++ b/script/ocf/booth-site @@ -1,203 +1,210 @@ #!/bin/bash # vim: set sw=4 : # # Resource Agent for BOOTH site daemon. # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License as # published by the Free Software Foundation. # # This program is distributed in the hope that it would be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Further, this software is distributed without any warranty that it is # free of the rightful claim of any third person regarding infringement # or the like. Any license provided herein, whether implied or # otherwise, applies only to this software file. Patent licenses, if # any, provided herein do not apply to combinations of this program with # other software, or any other product whatsoever. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # ####################################################################### # Initialization: DEFAULT_BIN="boothd" DEFAULT_CONF="/etc/booth/booth.conf" : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} +# shellcheck source=/usr/lib/ocf/lib/heartbeat/ocf-shellfuncs . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs ####################################################################### booth_site_meta_data() { cat < 1.0 This Resource Agent can control the BOOTH site daemon. It assumes that the binary boothd is in your default PATH. In most cases, it should be run as a primitive resource. BOOTH site daemon The configuration name (or configuration filename) to use. BOOTH Options Any additional options to start the BOOTH daemon with BOOTH Options The daemon to start The daemon to start END } ####################################################################### booth_site_usage() { cat < /dev/null } booth_site_start() { local rc booth_site_status rc=$? case $rc in 0) ocf_log info "boothd already running" return $OCF_SUCCESS ;; $OCF_NOT_RUNNING) ;; esac + # shellcheck disable=SC2154 + # (OCF_RESKEY_args: injected by CRM) $OCF_RESKEY_daemon daemon -c $OCF_RESKEY_config $OCF_RESKEY_args || return $OCF_ERR_GENERIC sleep 1 while ! booth_monitor_basic; do sleep 1 done return $OCF_SUCCESS } booth_site_stop() { local pid pid=`get_booth_pid` if [ -z "$pid" ]; then ocf_log info "boothd already stopped" return $OCF_SUCCESS fi ocf_stop_processes TERM 5 $pid while is_booth_running; do sleep 1 done return $OCF_SUCCESS } booth_site_restart() { booth_site_stop booth_site_start } booth_site_reload() { booth_site_restart } booth_site_monitor() { booth_site_status case $? in 0) return $OCF_SUCCESS ;; $OCF_NOT_RUNNING) return $OCF_NOT_RUNNING ;; esac } booth_site_validate_all() { if ! test -f $OCF_RESKEY_config; then ocf_log err "$OCF_RESKEY_config does not exist" return $OCF_ERR_INSTALLED fi + # shellcheck disable=SC2154 + # (OCF_RESKEY_CRM_meta_globally_unique: injected by CRM) if ocf_is_true $OCF_RESKEY_CRM_meta_globally_unique; then ocf_log err "$OCF_RESOURCE_INSTANCE must be configured with the globally_unique=false meta attribute" return $OCF_ERR_CONFIGURED fi return $OCF_SUCCESS } : ${OCF_RESKEY_daemon:=$DEFAULT_BIN} : ${OCF_RESKEY_config:=$DEFAULT_CONF} +# shellcheck disable=SC2034 +# (OCF_REQUIRED_BINARIES consumed by ocf_rarun) OCF_REQUIRED_BINARIES=${OCF_RESKEY_daemon} ocf_rarun $* diff --git a/script/ocf/geostore b/script/ocf/geostore index 85842a8..c180418 100755 --- a/script/ocf/geostore +++ b/script/ocf/geostore @@ -1,112 +1,114 @@ #!/bin/sh # # # geostore OCF RA. Just an example on how to use # geo-attr.sh # # Copyright (c) 2015 Dejan Muhamedagic # All Rights Reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License as # published by the Free Software Foundation. # # This program is distributed in the hope that it would be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Further, this software is distributed without any warranty that it is # free of the rightful claim of any third person regarding infringement # or the like. Any license provided herein, whether implied or # otherwise, applies only to this software file. Patent licenses, if # any, provided herein do not apply to combinations of this program with # other software, or any other product whatsoever. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # ####################################################################### # Initialization: : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} +# shellcheck source=/usr/lib/ocf/lib/heartbeat/ocf-shellfuncs . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs +# shellcheck source=script/ocf/geo_attr.sh . ${OCF_ROOT}/lib/booth/geo_attr.sh ####################################################################### geostore_meta_data() { cat < 1.0 This is the geostore Resource Agent. It's a sample for how to use geo_attr.sh. Sample GEO attribute RA `geo_attr_meta_data` END } ####################################################################### geostore_usage() { cat < 1.0 This is sharedrsc Resource Agent. It just keeps some resource while running and releases it when stopped. The resource is a directory on a shared filesystem or on a filesystem which is remotely accessible over ssh. Used for booth testing, i.e. to make sure that no two sites keep the same ticket. shared resource (booth testing) Location of the shared directory. If it's of the form "[user@]host:path" then it is assumed that the directory is to be accessed over ssh on that host. Otherwise, it must be a directory on a shared filesystem (such as nfs or ocfs2). shared directory location END } ####################################################################### sharedrsc_usage() { cat < $1/owner" } removecmd() { echo "test -d $1 && test \"\`cat $1/owner\`\" = `uname -n` && rm $1/owner && rmdir $1" } testdir() { runcmd testcmd $1 } makedir() { runcmd makecmd $1 } removedir() { runcmd removecmd $1 } sharedrsc_monitor() { if testdir $DIR; then return $OCF_SUCCESS else return $OCF_NOT_RUNNING fi } sharedrsc_start() { if sharedrsc_monitor; then return $OCF_SUCCESS fi makedir $DIR && return $OCF_SUCCESS local owner if ! owner=`runcmd getowner $DIR`; then owner="... nobody, it's only half-claimed" fi + # shellcheck disable=SC2154 + # (OCF_RESKEY_dir: injected by CRM) ocf_log err "eek, $OCF_RESKEY_dir already owned by $owner" return $OCF_ERR_GENERIC } sharedrsc_stop() { sharedrsc_monitor if [ $? -eq $OCF_NOT_RUNNING ]; then return $OCF_SUCCESS fi removedir $DIR } sharedrsc_getconfig() { local colon_pos colon_pos=`expr index "$OCF_RESKEY_dir" ":"` if [ $colon_pos -gt 0 ]; then SSH_HOST=`echo $OCF_RESKEY_dir | cut -d: -f 1` DIR=`echo $OCF_RESKEY_dir | cut -d: -f 2` else SSH_HOST= DIR=$OCF_RESKEY_dir fi } sharedrsc_validate_all() { if [ `expr index $DIR /` -ne 1 ]; then ocf_log err "dir must be an absolute path" return $OCF_ERR_INSTALLED fi return $OCF_SUCCESS } +# shellcheck disable=SC2034 +# (OCF_REQUIRED_PARAMS consumed by ocf_rarun) OCF_REQUIRED_PARAMS="dir" ocf_rarun $* # # vim:tabstop=4:shiftwidth=4:textwidth=0:wrapmargin=0 diff --git a/script/service-runnable.in b/script/service-runnable.in index 9ea33d4..2f58641 100755 --- a/script/service-runnable.in +++ b/script/service-runnable.in @@ -1,61 +1,61 @@ #!/bin/bash # This script is part of Booth. # It checks whether the given resource (service) still has a chance # to run on the local cluster, so that booth knows whether to # acquire the ticket here. service="${1:?Need a resource name as first argument.}" if [ -z "$service" ]; then @LOGGER@ "$0: bad usage: no resource name" exit 1 fi tmpshadow=`mktemp booth-check.XXXXXX` if [ $? -ne 0 -o ! -f "$tmpshadow" ]; then @LOGGER@ "$0: mktemp failed" exit 1 fi trap "rm -f $tmpshadow" EXIT # We expect an output like # p_dummy (ocf::pacemaker:Dummy): Started geo-rz2-a status=`crm_simulate -O $tmpshadow --ticket-grant "$BOOTH_TICKET" --simulate --live-check 2>&1` if [ $? -ne 0 ]; then @LOGGER@ "$0: crm_simulate failed" @LOGGER@ "$0: crm_simulate: $status" exit 1 fi if echo "$status" | sed -n '/^Revised cluster status:/,$p' | - egrep "^[[:space:]]+$service[[:space:]]+\(.*\):[[:space:]]+Started ([^[:space:]]+) *$" >/dev/null + egrep "^[[:space:]]+${service}[[:space:]]+\(.*\):[[:space:]]+Started ([^[:space:]]+) *$" >/dev/null then # can be started - we're done. exit 0 fi # If target-role is Stopped, it judges with being stopped explicitly. output=$(crm_resource --meta --get-parameter="target-role" --resource=$service 2>/dev/null) rc=$? if [ $rc -eq 0 -a "$output" = "Stopped" ]; then exit 0 fi # is ticket in standby? output=$(crm_ticket --ticket "$BOOTH_TICKET" --get-attr standby) rc=$? if [ $rc -eq 0 -a "$output" = true ]; then exit 0 fi # Some error occured. # Try to help the admin with a bit of diagnostic. # # disallow ms-resources, ie. only primitives wanted here if ! crm_resource -l | grep -v ":" | grep "$service" ; then @LOGGER@ "Defined resource '$service' in $BOOTH_CONF_PATH is not a primitive??" fi exit 1