This is V2 which incorporates comments given on V1. clm-adm: for performing CLM admin operations on CLM node and cluser. clm-find: for finding out object(s) configured for CLM classes SaClmCluster and SaClmNode. Additional options like membership status and admin state can also be given to find out objects which satisfy this criteria. clm-state: for listing CLM node(s) and their important attributes. --- opensaf.spec.in | 3 + src/clm/Makefile.am | 5 ++ src/clm/tools/clm-adm | 105 ++++++++++++++++++++++++++++++++++ src/clm/tools/clm-find | 84 +++++++++++++++++++++++++++ src/clm/tools/clm-state | 148 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 345 insertions(+) create mode 100644 src/clm/tools/clm-adm create mode 100644 src/clm/tools/clm-find create mode 100644 src/clm/tools/clm-state
diff --git a/opensaf.spec.in b/opensaf.spec.in index 0078fc2..70056b6 100644 --- a/opensaf.spec.in +++ b/opensaf.spec.in @@ -1445,6 +1445,9 @@ fi %{_bindir}/ntfsubscribe %{_bindir}/ntfread %{_bindir}/saflogger +%{_bindir}/clm-adm +%{_bindir}/clm-find +%{_bindir}/clm-state %if %is_ais_smf %{_bindir}/smf-adm %{_bindir}/smf-find diff --git a/src/clm/Makefile.am b/src/clm/Makefile.am index ad9f90a..da2d7d9 100644 --- a/src/clm/Makefile.am +++ b/src/clm/Makefile.am @@ -166,6 +166,11 @@ bin_osafclmna_LDADD = \ lib/libSaAmf.la \ lib/libopensaf_core.la +dist_bin_SCRIPTS += \ + src/clm/tools/clm-adm \ + src/clm/tools/clm-find \ + src/clm/tools/clm-state + if ENABLE_TESTS bin_PROGRAMS += bin/clmtest diff --git a/src/clm/tools/clm-adm b/src/clm/tools/clm-adm new file mode 100644 index 0000000..ae75fe5 --- /dev/null +++ b/src/clm/tools/clm-adm @@ -0,0 +1,105 @@ +#! /bin/sh +# -*- OpenSAF -*- +# +# Copyright (C) 2017, Oracle and/or its affiliates. All rights reserved. +# +# 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. This file and program are licensed +# under the GNU Lesser General Public License Version 2.1, February 1999. +# The complete license can be accessed from the following location: +# http://opensource.org/licenses/lgpl-license.php +# See the Copying file included with the OpenSAF distribution for full +# licensing terms. +# + +usage() +{ + echo "" + echo "USAGE: $(basename "$0") [-t value] <-o op_name> <DN>" + echo "" + echo "OPTIONS:" + echo " -t or --timeout : command timeout in seconds (default=60) (optional)" + echo " -o or --admin_op: operation name (mandatory)" + echo " 'lock' for admin lock " + echo " 'unlock' for admin unlock " + echo " 'shutdown' for admin shutdown " + echo " 'reset' for admin reset of cluster" + echo " DN : a valid DN name of CLM node or cluster (mandatory)" + echo "" + echo "" +} + +options=$(getopt -o t:o:h -l timeout:,admin_op:,help -- "$@") +status=$? +if [ $status -ne 0 ] ; then + echo "Try '$(basename "$0") -h or --help' for more information" + exit 1 +fi +eval set -- "$options" + +DN="" +CMD="" +TIMEOUT="" + +while true; do + case $1 in + -t|--timeout) + shift 1 + TIMEOUT=$1; + shift 1 + ;; + -o|--admin_op) + shift 1 + if [ "$1" = "unlock" ]; then + CMD=1 + elif [ "$1" = "lock" ]; then + CMD=2 + elif [ "$1" = "shutdown" ]; then + CMD=3 + elif [ "$1" = "reset" ]; then + CMD=4 + else + echo "Invalid operation name" + exit 1 + fi + shift 1 + ;; + -h|--help) + usage + exit 0 + ;; + \?) + echo "Invalid option" + exit 1 + ;; + --) + shift; + break; + ;; + esac +done + +if [ "$CMD" = "" ]; then + echo "operation name is mandatory" + echo "Try '$(basename "$0") -h or --help' for more information" + exit 1 +fi + +shift $((OPTIND -1)) + +DN="$*" +if [ "$DN" = "" ]; then + echo "DN name is mandatory" + echo "Try '$(basename "$0") -h or --help' for more information" + exit 1 +fi + +if [ "$TIMEOUT" = "" ]; then + immadm -o "$CMD" "$DN" +else + immadm -t "$TIMEOUT" -o "$CMD" "$DN" +fi + +exit $? + diff --git a/src/clm/tools/clm-find b/src/clm/tools/clm-find new file mode 100644 index 0000000..3073fb5 --- /dev/null +++ b/src/clm/tools/clm-find @@ -0,0 +1,84 @@ +#! /bin/sh + +# -*- OpenSAF -*- +# +# Copyright (C) 2017, Oracle and/or its affiliates. All rights reserved. +# +# 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. This file and program are licensed +# under the GNU Lesser General Public License Version 2.1, February 1999. +# The complete license can be accessed from the following location: +# http://opensource.org/licenses/lgpl-license.php +# See the Copying file included with the OpenSAF distribution for full +# licensing terms. +# + +usage() +{ + echo "" + echo "USAGE: $(basename "$0") [ option ]" + echo "" + echo "OPTIONS:" + echo " -c, --cluster-name : display DN of CLM cluster" + echo " -l, --locked : display DNs of locked nodes." + echo " -u, --unlocked : display DNs of unlocked nodes." + echo " -m, --member : display DNs of member nodes." + echo " -n, --nonmember : display DNs of non-member nodes." + echo " -h, --help : display this help" + echo "" + echo " Note: Without any option, DNs of all Nodes will be displayed." + echo "" +} + +list_with_states () +{ + for i in $(immfind -c "SaClmNode"); do + if [ "$1" = "locked" ] || [ "$1" = "unlocked" ]; then + value=$(immlist -a "saClmNodeAdminState" "$i" | cut -d = -f2) + if ([ "$1" = "locked" ] && [ "$value" -eq 2 ]) || ([ "$1" = "unlocked" ] && [ "$value" -eq 1 ]); then + echo "$i" + fi + else + value=$(immlist -a "saClmNodeIsMember" "$i" | cut -d = -f2) + if [ "$value" = "<Empty>" ]; then + value=0 + fi + if ([ "$1" = "nonmember" ] && [ "$value" -eq 0 ]) || ([ "$1" = "member" ] && [ "$value" -eq 1 ]); then + echo "$i" + fi + fi + done +} + +case $1 in + -c|--cluster-name) + immfind -c "SaClmCluster" + ;; + -l|--locked) + list_with_states "locked" + ;; + -u|--unlocked) + list_with_states "unlocked" + ;; + -m|--member) + list_with_states "member" + ;; + -n|--nonmember) + list_with_states "nonmember" + ;; + -h|--help) + usage + exit 0 + ;; + -?*) + echo "Invalid option" + echo "Try '$(basename "$0") -h or --help' for more information" + exit 1 + ;; + *) + immfind -c "SaClmNode" + ;; +esac +exit $? + diff --git a/src/clm/tools/clm-state b/src/clm/tools/clm-state new file mode 100644 index 0000000..5ef8685 --- /dev/null +++ b/src/clm/tools/clm-state @@ -0,0 +1,148 @@ +#! /bin/sh + +# -*- OpenSAF -*- +# +# Copyright (C) 2017, Oracle and/or its affiliates. All rights reserved. +# +# 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. This file and program are licensed +# under the GNU Lesser General Public License Version 2.1, February 1999. +# The complete license can be accessed from the following location: +# http://opensource.org/licenses/lgpl-license.php +# See the Copying file included with the OpenSAF distribution for full +# licensing terms. +# + +usage() +{ + echo "" + echo "USAGE: $(basename "$0") [ options ] [ DN ]" + echo "" + echo "OPTIONS:" + echo " -a, --admin : display admin state of node" + echo " -m, --membership : display membership status of node" + echo " -i, --nodeid : display CLM nodeid of node" + echo " -h, --help : display this help" + echo " DN : CLM node DN. If given, state(s) of only this node will be displayed." + echo "" + echo " Note: Without options, it displays three states for all nodes." + echo "" +} + +options=$(getopt -o a,m,i,h -l admin,membership,nodeid,help -- "$@") +status=$? +if [ $status -ne 0 ] ; then + echo "Try '$(basename "$0") -h or --help' for more information" + exit 1 +fi +eval set -- "$options" + +ADMIN=0 +MEMBERSHIP=0 +NODEID=0 +DN="" + +while true; do + case $1 in + -a|--admin) + ADMIN=1 + shift + ;; + -m|--membership) + MEMBERSHIP=1 + shift + ;; + -i|--nodeid) + NODEID=1 + shift + ;; + -h|--help) + usage + exit 0 + ;; + \?) + echo "Invalid option" + exit 1 + ;; + --) + shift; + break; + ;; + esac +done + +shift $((OPTIND -1)) + +DN="$*" +node_dns="" + +if [ "$DN" = "" ]; then + node_dns=$(immfind -c SaClmNode) +else + node_dns="$DN" + if ! (immfind "$DN" > /dev/null 2>&1); then + echo "invalid dn" + exit $? + fi +fi + +list_adminstate() +{ + value=$(immlist -a "saClmNodeAdminState" "$1" | cut -d = -f2) + if [ "$value" = "<Empty>" ]; then + echo " saClmNodeAdminState=$value" + elif [ "$value" -eq 1 ]; then + echo " saClmNodeAdminState=UNLOCKED(1)" + elif [ "$value" -eq 2 ]; then + echo " saClmNodeAdminState=LOCKED(2)" + elif [ "$value" -eq 3 ]; then + echo " saClmNodeAdminState=SHUTTING-DOWN(3)" + else + echo " saClmNodeAdminState=UNKNOWN($value)" + fi +} + +list_nodeid() +{ + value=$(immlist -a "saClmNodeID" "$1" | cut -d = -f2) + if [ "$value" != "<Empty>" ]; then + in_hex=$(printf %05x "$value") + echo " saClmNodeID=$value(0x$in_hex) " + else + echo " saClmNodeID=$value" + fi +} + +list_membership() +{ + value=$(immlist -a "saClmNodeIsMember" "$1" | cut -d = -f2) + if [ "$value" = "<Empty>" ]; then + echo " saClmNodeIsMember=$value" + elif [ "$value" -eq 1 ]; then + echo " saClmNodeIsMember=MEMBER(1)" + elif [ "$value" -eq 0 ]; then + echo " saClmNodeIsMember=NON_MEMBER(0)" + fi +} + +for node_dn in $node_dns; do + echo "$node_dn" + if [ $ADMIN -eq 0 ] && [ $MEMBERSHIP -eq 0 ] && [ $NODEID -eq 0 ]; then + list_adminstate "$node_dn" + list_membership "$node_dn" + list_nodeid "$node_dn" + else + if [ $ADMIN -eq 1 ]; then + list_adminstate "$node_dn" + fi + if [ $MEMBERSHIP -eq 1 ]; then + list_membership "$node_dn" + fi + if [ $NODEID -eq 1 ]; then + list_nodeid "$node_dn" + fi + fi +done + +exit 0 -- 1.9.1 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel