From 7de03e4e519705301265c0415b3c0af85263a7ac Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 09:52:36 +0200 Subject: Adding upstream version 1:4.13.0. Signed-off-by: Daniel Baumann --- ldirectord/OCF/Makefile.am | 26 +++++ ldirectord/OCF/ldirectord.in | 269 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 295 insertions(+) create mode 100644 ldirectord/OCF/Makefile.am create mode 100644 ldirectord/OCF/ldirectord.in (limited to 'ldirectord/OCF') diff --git a/ldirectord/OCF/Makefile.am b/ldirectord/OCF/Makefile.am new file mode 100644 index 0000000..1bea5f5 --- /dev/null +++ b/ldirectord/OCF/Makefile.am @@ -0,0 +1,26 @@ +# +# ldirectord: Linux-HA heartbeat code +# +# Copyright (C) 2007 Horms +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +MAINTAINERCLEANFILES = Makefile.in + +EXTRA_DIST = $(ocf_SCRIPTS) + +ocfdir = $(OCF_RA_DIR_PREFIX)/heartbeat + +ocf_SCRIPTS = ldirectord diff --git a/ldirectord/OCF/ldirectord.in b/ldirectord/OCF/ldirectord.in new file mode 100644 index 0000000..aea4626 --- /dev/null +++ b/ldirectord/OCF/ldirectord.in @@ -0,0 +1,269 @@ +#!/bin/sh +# +# ldirectord OCF RA. Wrapper around @sbindir@/ldirectord to +# be OCF RA compliant and therefore to get the possibility +# to monitor ldirectord by HAv2. +# Tested on SuSE Linux Enterprise Server 10. +# +# Should conform to the specification found at +# https://github.com/ClusterLabs/resource-agents/blob/master/doc/dev-guides/ra-dev-guide.asc +# and +# https://github.com/ClusterLabs/OCF-spec/blob/master/ra/resource-agent-api.md +# +# ToDo: Add parameter to start several instances of ldirectord +# with different config files. +# +# Copyright (c) 2007 Andreas Mock (andreas.mock@web.de) +# 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 the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. +# +####################################################################### +# +# OCF Parameters +# OCF_RESKEY_configfile +# OCF_RESKEY_ldirectord +# +####################################################################### +# Initialization: + +HA_VARRUNDIR=${HA_VARRUN} + +. ${OCF_ROOT}/lib/heartbeat/ocf-shellfuncs + +LDIRCONF=${OCF_RESKEY_configfile:-@sysconfdir@/ha.d/ldirectord.cf} +LDIRECTORD=${OCF_RESKEY_ldirectord:-@sbindir@/ldirectord} + +meta_data() { + cat < + + +1.0 + + +It's a simple OCF RA wrapper for ldirectord and uses the ldirectord interface +to create the OCF compliant interface. You win monitoring of ldirectord. +Be warned: Asking ldirectord status is an expensive action. + +Wrapper OCF Resource Agent for ldirectord + + + + + +The full pathname of the ldirectord configuration file. + +configuration file path + + + + + +The full pathname of the ldirectord. + +ldirectord binary path + + + + + + + + + + + + + +END +} + +####################################################################### + +ldir_init() { + # check the supplied parameters exist enough that we can do all the other + # operations + if [ ! -f $LDIRCONF ]; then + ocf_log warn "$LDIRCONF not found, ldirectord not installed" + exit $OCF_ERR_INSTALLED + fi + + if [ ! -x $LDIRECTORD ]; then + ocf_log warn "$LDIRECTORD not found, ldirectord not installed" + exit $OCF_ERR_INSTALLED + fi +} + +ldirectord_usage() { + cat <&1` + RET=$? + + if [ $RET -eq 0 ]; then + ocf_log warn "Killing ldirectord($PID) with SIGTERM" + kill $PID + fi + + pgrep -f "$LDIRECTORD $LDIRCONF start" >/dev/null 2>&1 + RET=$? + # if ldirectord is not running any more, we've (kind of) successfully + # stopped it + if [ $RET -eq 1 ]; then + return $OCF_SUCCESS + else + # ldirectord is still running? Kill it badly + ocf_log warn "Killing ldirectord($PID) with SIGKILL" + kill -9 $PID + + pgrep -f "$LDIRECTORD $LDIRCONF start" >/dev/null 2>&1 + RET=$? + # if it's not dead after here, we can't really do anything more + if [ $RET -eq 1 ]; then + return $OCF_SUCCESS + fi + fi + + # if none of our kills work, return an error. This should force the + # resource unmanaged + # on this node, requiring manual intervention. + return $OCF_ERR_GENERIC + else + ocf_log info "Stopping ldirectord" + # if ldirectord status is not an error, issue a stop. Multiple stops + # will return 0 + $LDIRECTORD $LDIRCONF stop + RET=$? + case $RET in + 0) return $RET;; + *) return 1;; + esac + fi +} + +# simple check to see if ldirectord is running, returns the proper OCF codes. +ldirectord_status() { + OUTPUT=`$LDIRECTORD $LDIRCONF status 2>&1` + case $? in + 0) return $OCF_SUCCESS;; + 1) expr match "$OUTPUT" '.*ldirectord stale pid file.*' >/dev/null + if [ $? -eq 0 ]; then + return $OCF_NOT_RUNNING + else + return $OCF_ERR_GENERIC + fi;; + 2) ocf_log err "$LDIRCONF has configuration errors" + echo $OUTPUT + return $OCF_ERR_GENERIC;; + 3) return $OCF_NOT_RUNNING;; + *) echo $OUTPUT + return $OCF_ERR_GENERIC;; + esac +} + +ldirectord_monitor() { + # check if the process is running first + ldirectord_status + RET=$? + + if [ $RET -ne $OCF_SUCCESS ]; then + return $RET + fi + + # do more advanced checks here for high OCF_CHECK_LEVELs. Don't know what + # more we can do at this time, + # a status call already hits LVS in the kernel. +} + +ldirectord_validate() { + #ldir_init is already called, there's nothing more we can validate unless + #we add more attributes + return 0 +} + +case $1 in + meta-data|usage|help) : ;; + *) ldir_init $@ ;; +esac + +case $__OCF_ACTION in +meta-data) meta_data + exit $OCF_SUCCESS + ;; +start) ldirectord_start + ldirectord_exit $? + ;; +stop) ldirectord_stop + ldirectord_exit $? + ;; +monitor) ldirectord_monitor + ldirectord_exit $? + ;; +validate-all) ldirectord_validate + ldirectord_exit $? + ;; +usage|help) ldirectord_usage + exit $OCF_SUCCESS + ;; +*) ldirectord_usage + exit $OCF_ERR_UNIMPLEMENTED + ;; +esac -- cgit v1.2.3