From mboxrd@z Thu Jan 1 00:00:00 1970 From: lhh@sourceware.org Date: 14 Feb 2007 19:13:18 -0000 Subject: [Cluster-devel] cluster/rgmanager/src/resources/utils member_u ... Message-ID: <20070214191318.20391.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit CVSROOT: /cvs/cluster Module name: cluster Branch: STABLE Changes by: lhh at sourceware.org 2007-02-14 19:13:17 Added files: rgmanager/src/resources/utils: member_util.sh Log message: Add member_util.sh functions Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/utils/member_util.sh.diff?cvsroot=cluster&only_with_tag=STABLE&r1=NONE&r2=1.1.6.1 /cvs/cluster/cluster/rgmanager/src/resources/utils/member_util.sh,v --> standard output revision 1.1.6.1 --- cluster/rgmanager/src/resources/utils/member_util.sh +++ - 2007-02-14 19:13:18.331157000 +0000 @@ -0,0 +1,91 @@ +#!/bin/bash + +# +# Copyright Red Hat, Inc. 2007 +# +# 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, 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; see the file COPYING. If not, write to the +# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, +# MA 02139, USA. +# +# Description: +# Utility functions to get membership information. +# +# Author(s): +# Lon Hohberger (lhh at redhat.com) +# + +# +# Use clustat to figure out if the specified node is a member +# of the cluster. Returns 2 if not found, 1 if not a member, and +# 0 if the node is happily running. +# Tested on RHEL4 and RHEL5; requires RHCS 5.1 or 4.5 to operate +# properly in all cases. +# +is_node_member_clustat() +{ + declare line=$(clustat -xm $1 | grep "name=\"$1\"") + declare tmp + + # Done if there's no node in the list with that name: not a + # cluster member, and not in the configuration. + [ -n "$line" ] || return 2 + + # Clear out xml tag seps. + line=${line/*/} + + # Make vars out of XML attributes. + for tmp in $line; do + eval declare __$tmp + done + + # Flip the value. clustat reports 1 for member, 0 for not; + # Exactly the opposite of what a shell script expects. + ((__state = !__state)) + return $__state +} + + +# +# Print the local node name to stdout +# Returns 0 if could be found, 1 if not +# Tested on RHEL4 (magma) and RHEL5 (cman) +# +local_node_name() +{ + declare node state line + + if which magma_tool &> /dev/null; then + # Use magma_tool, if available. + line=$(magma_tool localname | grep "^Local") + + if [ -n "$line" ]; then + echo ${line/* = /} + return 0 + fi + fi + + if ! which cman_tool &> /dev/null; then + # No cman tool? :( + return 2 + fi + + # Use cman_tool + + line=$(cman_tool status | grep -i "Node name: $1") + [ -n "$line" ] || return 1 + echo ${line/*name: /} + return 0 +} +