100 lines
2.3 KiB
Bash
100 lines
2.3 KiB
Bash
#!/bin/bash
|
|
# _ __ _
|
|
# ((-)).--.((-))
|
|
# / '' \
|
|
# ( \______/ )
|
|
# \ ( ) /
|
|
# / /~~~~~~~~\ \
|
|
# /~~\/ / \ \/~~\
|
|
# ( ( ( ) ) )
|
|
# \ \ \ \ / / / /
|
|
# _\ \/ \.______./ \/ /_
|
|
# ___/ /\__________/\ \___
|
|
# *****************************
|
|
# Frogg - admin@frogg.fr
|
|
# http://github.com/FroggDev/zabbix-nfs
|
|
# *****************************
|
|
|
|
##########
|
|
# PARAMS #
|
|
##########
|
|
NFSACTION=$1
|
|
NFSSERVER=$2
|
|
NFSSHARES=$3
|
|
|
|
#############
|
|
# Functions #
|
|
#############
|
|
|
|
# ---
|
|
# Get the NFS version of a server
|
|
# @param serverIP
|
|
# @return NFS version
|
|
function getNfsVersion()
|
|
{
|
|
# Init NFS version to 0 = unavailable
|
|
VERSION=0
|
|
|
|
# Get NFS information using rpcinfo without error messages
|
|
TESTNFS=$(rpcinfo -t $1 nfs 2> /dev/null)
|
|
|
|
# Split all lines in the array TESTNFS
|
|
IFS=$'\n' read -rd '' -a TESTNFSLINES <<<"$TESTNFS"
|
|
|
|
# Loop over all lines of the array TESTNFSLINES
|
|
for TESTNFSLINE in "${TESTNFSLINES[@]}";
|
|
do
|
|
[[ $TESTNFSLINE =~ "version 2 ready and waiting" ]] && VERSION=2
|
|
[[ $TESTNFSLINE =~ "version 3 ready and waiting" ]] && VERSION=3
|
|
[[ $TESTNFSLINE =~ "version 4 ready and waiting" ]] && VERSION=4
|
|
done;
|
|
|
|
# Display the NFS version or 0 if not available
|
|
echo $VERSION
|
|
}
|
|
|
|
# ---
|
|
# Get the NFS version of a server
|
|
# @param serverIP
|
|
# @param nfs share list separated with :
|
|
# @return nfs share not found
|
|
function checkNfsShare()
|
|
{
|
|
# Init NFS share not available (epmty by default)
|
|
RESULT=""
|
|
|
|
# Get NFS information using showmount without error messages
|
|
NFSDATA=$(showmount -e $1 2> /dev/null)
|
|
|
|
# Store the result as array
|
|
IFS=$'\n' read -rd '' -a NFSDATAS <<< "$NFSDATA"
|
|
|
|
# Get NFS share set as params and store it as an array
|
|
SHARES=$(echo $2 | tr "," "\n")
|
|
|
|
#For each NFS share test if exist in server NFS share list
|
|
for SHARE in $SHARES
|
|
do
|
|
# Check if NFS share does not exist in NFS server shares
|
|
[[ ! " ${NFSDATAS[@]} " =~ " ${SHARE} " ]] && RESULT="${RESULT}[${SHARE}]"
|
|
done
|
|
|
|
echo $RESULT
|
|
}
|
|
|
|
########
|
|
# MAIN #
|
|
########
|
|
|
|
# Clean screen
|
|
#clear
|
|
|
|
case ${NFSACTION} in
|
|
# command check version
|
|
("version")echo $(getNfsVersion "$NFSSERVER");;
|
|
# command check nfs share
|
|
("share")echo $(checkNfsShare "$NFSSERVER" "$NFSSHARES");;
|
|
# command not set or invalid
|
|
(*)echo "Error : command [${NFSACTION}] not found"
|
|
esac
|