You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
712 lines
27 KiB
Bash
712 lines
27 KiB
Bash
#!/bin/bash
|
|
# hpeilo_nagios_config -- The script aims to generate nagios
|
|
# configuration file for discovering the
|
|
# HP ProLiant Servers.
|
|
# (C) Copyright [2015] Hewlett-Packard Enterprise Development Company, L.P.
|
|
#
|
|
# 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 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:
|
|
# Free Software Foundation, Inc.
|
|
# 51 Franklin Street, Fifth Floor
|
|
# Boston, MA 02110-1301, USA.
|
|
#
|
|
# Written by Chandrakant Hugar <chandrakant.hugar@hp.com>.
|
|
|
|
CLEARSCREEN=$(/usr/bin/tput clear)
|
|
Nagios_iLO_Plugins_Path=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
|
|
|
HP_iLO_NAGIOS_INTRO="The \"hpeilo_nagios_config\" configuration script will help you to create HPE iLO nagios plugin configuration file which is later can used for active/passive HPE iLO host servers discovery and configure the nagios configuration file on monitoring host.\n\nFollowing are the parameters,user has to configur to get \"nagios-plugins-hpeilo\" to work efficiently.\n\n"
|
|
HP_iLO_NAGIOS_INTRO_1="\e[1mActive discovery: \e[0mActive discovery scans all reachable HPE iLO servers in the network of the monitoring server. This approach can discover all HPE iLO servers in a given network ip range or network subnet.\nNote: Active discovery is a time-consuming process and it depends on total number of hosts in a network subnet or IP range.\n\nYou have to enable to do active discovery in HPE iLO nagios plugin configuration file to scan all HPE iLO servers one time.\n\n"
|
|
HP_iLO_NAGIOS_INTRO_2="\e[1mPassive discovery: \e[0mPassive discovery discovers HPE iLO servers once receiving the cold start traps generated by those servers.\nThe traps are generated when those servers get booted successfully, so this approach cannot discover the up and running servers.\nAlso it is required to add \"traphandle\" command and community string in \"snmptrapd.conf\" file as mentioned in the below example.\n\t\"authCommunity log,execute,net <community string>\"\n\t\"traphandle 1.3.6.1.6.3.1.1.5.1 ${Nagios_iLO_Plugins_Path}/nagios_hpeilo_cfg_generator -m 2 \n\t${Nagios_iLO_Plugins_Path}/hpeilo_nagios_config.cfg\"\n\t\"traphandle 1.3.6.1.4.1.232.0.* ${Nagios_iLO_Plugins_Path}/nagios_hpeilo_traps\".\nThe \"snmptrapd\" service will be restarted once its configured.\n\nYou have to enable Passive discovery in HPE iLO nagios plugin configuration file to add the HPE iLO server on receiving cold trap.\n"
|
|
|
|
HP_iLO_NAGIOS_INTRO_3="\e[1mHPE iLO server Host Group: \e[0mA HPE iLO server Host Group is used to group one or more HPE iLO servers together under one group.\nIt consists of \"Group Name\",\"IP address range or Network subnet or IP address\" and \"Community string\".\nThese data are used to configure nagios \"Host Group\" Directives for simplifying configuration with display purposes.\nAn example of HPE iLO Host Group is as below\n\t\"HOSTGROUP:HPE_iLO_Group_1,192.1.10.20-192.1.10.200,public,public\"\n\nYou have to add at least one Host Group to discover the HPE iLO servers using any of the above mentioned discovery method.\nNote: Default generic host group will be created and the discovered HPE iLO servers will be added to this group if the discovered HPE iLO server IP does not belongs to any of the configured host groups.\n\n"
|
|
HP_iLO_NAGIOS_INTRO_4="\e[1mcheck_interval:\e[0m It is used to configure check interval of HPE iLO servers. Default value is set to 5 minute.\n\n"
|
|
|
|
HP_iLO_NAGIOS_INTRO_n="\e[1mYou may press <ctrl+c> now to exit if needed.\e[0m\n\n"
|
|
HP_iLO_NAGIOS_PASSIVE_DISC_INTRO="Configuring HPE iLO nagios plugin for passive discovery.\nPassive discovery enable monitoring host to add a HPE iLO host server to host group on receiving SNMP cold trap.it requires adding \"traphandle\" in \"snmptrapd\" configuration file for SNMP cold trap OID and system health trap OID\n"
|
|
|
|
HP_iLO_NAGIOS_ACTIVE_DISC_INTRO="Configuring HPE iLO nagios plugin for active discovery.\nActive discovery will do network scan for all the HPE iLO hosts which are configured in the host group and add to the nagios host group with respective host group name.\nIt requires to executing the \"nagios_hpeilo_cfg_generator\" script at least one time to complete the network scan for the hosts.\n"
|
|
|
|
HP_iLO_NAGIOS_NET_INTERFACE_INTRO="Active discovery requires network interface to scan all HPE iLO host's over the network.\nYou can find the network interface by running the command \"ifconfig -a\".\nMake sure network interface is up and ip is mapped to the HPE iLO host group ip range specified while configuring HPE iLO host group.\n"
|
|
|
|
HP_iLO_NAGIOS_HOSTS_INTRO="HPE iLO host group configuration.\nHPE iLO host groups can be created with a range of IP address or a IP address.\nYou can also create host group based on SNMP read only community string.\nDefault generic host group will be created if host group is not configured or if HPE iLO host which are discoved and not in the configured host group\nIP range will be added with default \"public\" SNMP read-only community to the default host group name.\n"
|
|
|
|
HP_iLO_NAGIOS_HOSTGROUP_INTRO="HPE iLO host group configuration requires host group name, host group IP range address and SNMP read-only community string as example below.\nhost group name: Data_center-A,Note:no space allowed\nhost group valid IP range : 192.10.10.2/24 or 192.10.10.20-192.10.10.200 or 192.10.10.15 .\nValid SNMP read-only community string configured in the HPE iLO page, default value is \"public\" if not specified.\n"
|
|
|
|
HP_iLO_NAGIOS_HOSTIP_INTRO="\n\e[1mHPE iLO nagios monitoring server host ip:\e[0m\nExample:\n\t1: eth0 128.88.150.216\n\t2: eth1 192.168.1.10\n\t3: eth2 192.10.10.100\n\t.\n\t.\n\tn:\n\tYou have to enter valid option 1 or 2 or n to configure host ip.\n\n\n"
|
|
|
|
HP_iLO_NAGIOS_CONTACTGROUP_INTRO="\nHPE iLO contact group and contacts configuration requires contact group name, contact group alias and contact details as example below.\ncontactgroup_name: linuxAdminGroup\nalias : Linux admin group \ncontact_name: iloAdmin\nalias : Ilo admin \nemail : iloadmin@hpe.com\n"
|
|
|
|
DEFAULT_CONFIG_FILE_NAME="hpeilo_nagios_config.cfg"
|
|
CONFIG_FLAG=
|
|
iLO_CFGFILE="ilo/ilo.cfg"
|
|
ILOCFG=
|
|
|
|
function get_hpiLO_nagios_install_path {
|
|
local iLO_nagios_plugin="nagios_hpeilo_engine"
|
|
NAGIOS_INST_PATH="${Nagios_iLO_Plugins_Path}"
|
|
}
|
|
|
|
#Function to display configuration script info message
|
|
# $1 contains display message
|
|
# $2 contains the TTY device node
|
|
# $3 contains NOBLANK or CLSCR
|
|
#always return 0
|
|
|
|
function displayIntro()
|
|
{
|
|
if [ "$3" != "NOCLSCR" ]; then
|
|
echo "$CLEARSCREEN" > $2
|
|
fi
|
|
printf "$1" 2> $2 |grep -w -oE '.{1,120}'
|
|
return 0
|
|
}
|
|
|
|
|
|
get_tty()
|
|
{
|
|
# $1 contains the ENV for tty
|
|
# Return 0 when succeed
|
|
TMP=/dev/tty
|
|
<$TMP >/dev/null 2>&1
|
|
if [ $? = 0 ]; then
|
|
eval $1="$TMP"
|
|
return 0
|
|
fi
|
|
eval $1=""
|
|
return 1
|
|
}
|
|
|
|
get_installmode()
|
|
{
|
|
get_tty TMPTTY
|
|
if [ ! -z "$TMPTTY" ]; then
|
|
eval $1="$TMPTTY"
|
|
fi
|
|
}
|
|
|
|
# $1 contains Data
|
|
# $2 contains NOBLANK or BLANKOK
|
|
# $3 contains NOSPACE or SPACEOK or YESNO
|
|
validate_data ()
|
|
{
|
|
[ $2 = "NOBLANK" -a -z "$1" ] && return 1
|
|
if [ $3 = "NOSPACE" ]; then
|
|
echo $ANS | egrep ' | ' >/dev/null 2>&1
|
|
[ $? = 0 ] && return 2
|
|
fi
|
|
if [ $3 = "YESNO" ]; then
|
|
if [ ! -z "`echo $ANS | tr -d 'yn'`" ]; then
|
|
return 3
|
|
fi
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
# Verify an IP Address:
|
|
function is_IP() {
|
|
if [ `echo $1 | grep -o '\.' | wc -l` -ne 3 ]; then
|
|
return 1;
|
|
elif [ `echo $1 | tr '.' ' ' | wc -w` -ne 4 ]; then
|
|
return 1;
|
|
else
|
|
for OCTET in `echo $1 | tr '.' ' '`; do
|
|
if ! [[ $OCTET =~ ^[0-9]+$ ]]; then
|
|
return 1;
|
|
elif [[ $OCTET -lt 0 || $OCTET -gt 255 ]]; then
|
|
return 1;
|
|
fi
|
|
done
|
|
fi
|
|
|
|
return 0;
|
|
}
|
|
|
|
function is_valid_range()
|
|
{
|
|
local bool=0
|
|
local ip1=
|
|
local ip2=
|
|
OIFS=$IFS
|
|
IFS='.'
|
|
ip1=($1)
|
|
ip2=($2)
|
|
IFS=$OIFS
|
|
#check first octet
|
|
if [[ ${ip1[0]} -ne ${ip2[0]} ]]; then
|
|
bool=1
|
|
elif [[ ${ip1[0]} -eq ${ip2[0]} ]] && [[ ${ip1[1]} -gt ${ip2[1]} ]]; then
|
|
bool=1
|
|
elif [[ ${ip1[1]} -eq ${ip2[1]} ]] && [[ ${ip1[2]} -gt ${ip2[2]} ]]; then
|
|
bool=1
|
|
elif [[ ${ip1[2]} -eq ${ip2[2]} ]] && [[ ${ip1[3]} -gt ${ip2[3]} ]]; then
|
|
bool=1
|
|
fi
|
|
echo $bool
|
|
}
|
|
|
|
|
|
function getSubnetMask()
|
|
{
|
|
local i
|
|
local subnetmask=""
|
|
local full_octets=$(($1/8))
|
|
local partial_octet=$(($1%8))
|
|
for ((i=0;i<4;i+=1)); do
|
|
if [ $i -lt $full_octets ]; then
|
|
subnetmask+=255
|
|
elif [ $i -eq $full_octets ]; then
|
|
subnetmask+=$((256 - 2**(8-$partial_octet)))
|
|
else
|
|
subnetmask+=0
|
|
fi
|
|
[ $i -lt 3 ] && subnetmask+=.
|
|
done
|
|
|
|
echo $subnetmask
|
|
}
|
|
|
|
function valid_ip_range()
|
|
{
|
|
local ip_1=`echo $1 | awk -F '/' '{print $1}'`
|
|
local ip_2=`echo $1 | awk -F '-' '{print $2}'`
|
|
local subnet_mask_bits=`echo $1 | awk -F '/' '{print $2}'`
|
|
local stat=1
|
|
local check_range=1
|
|
local ip_addr[0]=`echo $ip_1 | awk -F '-' '{print $1}'`
|
|
if [ "x${ip_2}" != "x" ];then
|
|
ip_addr[1]=$ip_2
|
|
check_range=0
|
|
elif [ "x${subnet_mask_bits}" != "x" ];then
|
|
num='^[0-9]+$'
|
|
if ! [[ $subnet_mask_bits =~ $num ]] ; then
|
|
return 1
|
|
else
|
|
ip_2=$(getSubnetMask $subnet_mask_bits)
|
|
fi
|
|
ip_addr[1]=$ip_2
|
|
fi
|
|
for((idx=0;idx<${#ip_addr[@]};idx++)); do
|
|
local ip=${ip_addr[$idx]}
|
|
if is_IP $ip; then
|
|
stat=0
|
|
else
|
|
stat=1
|
|
fi
|
|
done
|
|
|
|
if [[ $stat -eq 0 ]] && [[ $check_range -eq 0 ]]; then
|
|
stat=$(is_valid_range ${ip_addr[0]} ${ip_addr[1]})
|
|
fi
|
|
|
|
return $stat
|
|
}
|
|
|
|
#$1 array of elements
|
|
function isduplicate_value()
|
|
{
|
|
local stat=0
|
|
local values=("$@")
|
|
local num_ele=${#values[@]}
|
|
if [ $num_ele -gt 1 ]; then
|
|
num_ele=$(($num_ele-1))
|
|
local key=${values[$num_ele]}
|
|
stat=`echo "${values[@]:0:$num_ele}" | grep -c -w "^$key"`
|
|
fi
|
|
return $stat
|
|
}
|
|
# $1 contains the user prompt
|
|
# $2 contains the TTY device node
|
|
# $3 contains NOBLANK or BLANKOK
|
|
# $4 contains NOSPACE or SPACEOK
|
|
# $5 contains ECHO or NOECHO
|
|
# $6 contains CLSCR or NOCLSCR
|
|
# Always return 0
|
|
get_userinput ()
|
|
{
|
|
# echo "" > $2
|
|
if [ "$5" = NOECHO ]; then
|
|
stty -F $2 -echo
|
|
printf "\nNOTE: keyboard input echo has been turned off." > $2
|
|
fi
|
|
while true; do
|
|
while true; do
|
|
if [ "$6" != "NOCLSCR" ]; then
|
|
echo "$CLEARSCREEN" > $2
|
|
fi
|
|
printf "$1" "" > $2
|
|
read ANS < $2
|
|
[ "$5" = NOECHO ] && echo "" > $2
|
|
validate_data "$ANS" "$3" "$4"
|
|
case "$?" in
|
|
1)
|
|
continue
|
|
;;
|
|
2)
|
|
echo -n "ERROR: Space and tab are not allowed, press ENTER to continue ..." > $2
|
|
read ANS < $2
|
|
[ "$5" = NOECHO ] && echo "" > $2
|
|
continue
|
|
;;
|
|
3)
|
|
echo -n "ERROR: You must type 'y' or 'n', press ENTER to continue ..." > $2
|
|
read ANS < $2
|
|
[ "$5" = NOECHO ] && echo "" > $2
|
|
continue
|
|
esac
|
|
break
|
|
done
|
|
[ ! "$5" = NOECHO ] && break
|
|
[ -z "$ANS" ] && break
|
|
printf "Re-enter the same input to confirm: " > $2
|
|
read ANS1 < $2
|
|
echo "" > $2
|
|
if [ "$ANS1" = "$ANS" ]; then
|
|
printf "ACCEPTED: inputs match!\n\n" > $2
|
|
break
|
|
fi
|
|
printf "ERROR: inputs mismatch! Press ENTER to try again." > $2
|
|
read ANS < $2
|
|
done
|
|
if [ "$5" = NOECHO ]; then
|
|
stty -F $2 echo
|
|
fi
|
|
echo $ANS
|
|
return 0
|
|
}
|
|
|
|
|
|
|
|
function cfg_passive_enable_value()
|
|
{
|
|
local temp=$(get_userinput "\nDo you wish to enable passive HPE iLO host discovery (y/n) (Blank is y): " $TTY BLANKOK YESNO ECHO NOCLSCR)
|
|
if [ "$temp" = "n" ]; then
|
|
PASSIVE_DISCOVERY=0
|
|
else
|
|
PASSIVE_DISCOVERY=1
|
|
fi
|
|
}
|
|
|
|
|
|
function cfg_active_enable_value() {
|
|
local temp=$(get_userinput "\nDo you wish to enable active discovery (y/n) (Blank is y): " $TTY BLANKOK YESNO ECHO NOCLSCR)
|
|
if [ "$temp" = "n" ]; then
|
|
ACTIVE_DISCOVERY=0
|
|
else
|
|
ACTIVE_DISCOVERY=1
|
|
fi
|
|
|
|
|
|
}
|
|
|
|
function cfg_monitor_host_ip() {
|
|
echo
|
|
displayIntro "\n$HP_iLO_NAGIOS_HOSTIP_INTRO" $TTY NOCLSCR
|
|
echo
|
|
echo
|
|
displayIntro "HPE iLO Nagios Monitoring Server Host IP" $TTY NOCLSCR
|
|
while true; do
|
|
oldifs="$IFS"
|
|
IFS=$'\n'
|
|
array=($(ip -o -4 addr show | awk -F '[ /]+' '/global/ {print $2,$4}'))
|
|
num_arr_ele=`ip -o -4 addr show | awk -F '[ /]+' '/global/ {print $2,$4}' | wc -l`
|
|
for ((idx=0;idx<$num_arr_ele;idx++)); do
|
|
echo "$((idx + 1)): ${array[$idx]}"
|
|
done
|
|
hostip_array=($(ip -o -4 addr show | awk -F '[ /]+' '/global/ {print $4}'))
|
|
while true; do
|
|
local ip_opt=$(get_userinput "\nEnter valid option to configure nagios monitoring server host ip:" $TTY NOBLANK NOSPACE ECHO NOCLSCR)
|
|
|
|
if [ "$ip_opt" -ge "1" ] && [ "$ip_opt" -le "$num_arr_ele" ]; then
|
|
break
|
|
fi
|
|
done
|
|
ip_opt=$((ip_opt - 1))
|
|
nagios_hostip=${hostip_array[$ip_opt]}
|
|
IFS="$oldifs"
|
|
|
|
stat=$(is_valid_range $nagios_hostip $nagios_hostip )
|
|
|
|
|
|
if [ "$stat" -eq "0" ]; then
|
|
break
|
|
fi
|
|
done
|
|
}
|
|
|
|
function cfg_hostgroup()
|
|
{
|
|
local host_entries=0
|
|
local flag=
|
|
hostgreoup_name=()
|
|
local arr_tmp_ele=
|
|
local temp=$(get_userinput "\nDo you wish to configure host groups (y/n) (Blank is y): " $TTY BLANKOK YESNO ECHO NOCLSCR)
|
|
if [ "$temp" != "n" ]; then
|
|
displayIntro "\n$HP_iLO_NAGIOS_HOSTGROUP_INTRO" $TTY NOCLSCR
|
|
while true; do
|
|
while true;do
|
|
hostgreoup_name[$host_entries]=$(get_userinput "\nEnter host group name: " $TTY NOBLANK NOSPACE ECHO NOCLSCR)
|
|
arr_tmp_ele=${hostgreoup_name[$host_entries]}
|
|
if isduplicate_value ${hostgreoup_name[@]}; then
|
|
break
|
|
else
|
|
displayIntro "\n\t\"$arr_tmp_ele\" is already exists" $TTY NOCLSCR
|
|
fi
|
|
done
|
|
while true; do
|
|
hostgroup_ip[$host_entries]=$(get_userinput "\nEnter host group \"${hostgreoup_name[$host_entries]}\" IP range: " $TTY NOBLANK NOSPACE ECHO NOCLSCR)
|
|
if valid_ip_range $hostgroup_ip; then
|
|
arr_tmp_ele=${hostgroup_ip[$host_entries]}
|
|
if isduplicate_value ${hostgroup_ip[@]}; then
|
|
break;
|
|
else
|
|
displayIntro "\n\t\"$arr_tmp_ele\" is already exists" $TTY NOCLSCR
|
|
fi
|
|
|
|
else
|
|
displayIntro "\n\t\"${hostgroup_ip[$host_entries]}\" is not valide IP or IP range" $TTY NOCLSCR
|
|
fi
|
|
done
|
|
hostgrp_read_comm[$host_entries]=$(get_userinput "\nEnter host group \"${hostgreoup_name[$host_entries]}\" SNMP read-only community string (Blank default value public): " $TTY BLANKOK NOSPACE NOECHO NOCLSCR)
|
|
hostgrp_trap_comm[$host_entries]=$(get_userinput "\nEnter host group \"${hostgreoup_name[$host_entries]}\" SNMP Trap community string (Blank default value public): " $TTY BLANKOK NOSPACE NOECHO NOCLSCR)
|
|
|
|
if [ "x${hostgrp_read_comm[$host_entries]}" = "x" ]; then
|
|
hostgrp_read_comm[$host_entries]="public"
|
|
fi
|
|
|
|
if [ "x${hostgrp_trap_comm[$host_entries]}" = "x" ]; then
|
|
hostgrp_trap_comm[$host_entries]="public"
|
|
fi
|
|
|
|
temp=$(get_userinput "\nDo you wish to add one more host group (y/n) (Blank is n): " $TTY BLANKOK YESNO ECHO NOCLSCR)
|
|
if [ "$temp" != "y" ]; then
|
|
break
|
|
fi
|
|
host_entries=$(($host_entries+1))
|
|
done
|
|
fi
|
|
|
|
}
|
|
|
|
function cfg_contactgroup()
|
|
{
|
|
local contactgroup_entries=0
|
|
local flag=
|
|
contactgroup_name=()
|
|
local arr_tmp_ele=
|
|
local temp=$(get_userinput "\nDo you wish to configure Contact group (y/n) (Blank is y): " $TTY BLANKOK YESNO ECHO NOCLSCR)
|
|
if [ "$temp" != "n" ]; then
|
|
displayIntro "\n$HP_iLO_NAGIOS_CONTACTGROUP_INTRO" $TTY NOCLSCR
|
|
while true;do
|
|
contactgroup_name[$contactgroup_entries]=$(get_userinput "\nEnter Contact group name : " $TTY NOBLANK NOSPACE ECHO NOCLSCR)
|
|
arr_tmp_ele=${contactgroup_name[$contactgroup_entries]}
|
|
if isduplicate_value ${contactgroup_name[@]}; then
|
|
break
|
|
else
|
|
displayIntro "\n\t\"$arr_tmp_ele\" is already exists" $TTY NOCLSCR
|
|
fi
|
|
done
|
|
while true; do
|
|
contactgroup_alias[$contactgroup_entries]=$(get_userinput "\nEnter Contact group alias : " $TTY NOBLANK SPACEOK ECHO NOCLSCR)
|
|
arr_tmp_ele=${contactgroup_alias[$contactgroup_entries]}
|
|
if isduplicate_value ${contactgroup_alias[@]}; then
|
|
break;
|
|
else
|
|
displayIntro "\n\t\"$arr_tmp_ele\" is already exists" $TTY NOCLSCR
|
|
fi
|
|
done
|
|
local contact_entries=0
|
|
local cflag=
|
|
contact_name=()
|
|
local arr_tmp_cele=
|
|
local temp="y"
|
|
|
|
if [ "$temp" != "n" ]; then
|
|
while true; do
|
|
while true;do
|
|
contact_name[$contact_entries]=$(get_userinput "\nEnter Contact name (No Spaces in between) : " $TTY NOBLANK NOSPACE ECHO NOCLSCR)
|
|
arr_tmp_cele=${contact_name[$contact_entries]}
|
|
if isduplicate_value ${contact_name[@]}; then
|
|
break
|
|
else
|
|
displayIntro "\n\t\"$arr_tmp_cele\" is already exists" $TTY NOCLSCR
|
|
fi
|
|
done
|
|
while true; do
|
|
contact_alias[$contact_entries]=$(get_userinput "\nEnter Contact alias : " $TTY NOBLANK SPACEOK ECHO NOCLSCR)
|
|
arr_tmp_cele=${contact_alias[$contact_entries]}
|
|
if isduplicate_value ${contact_alias[@]}; then
|
|
break;
|
|
else
|
|
displayIntro "\n\t\"$arr_tmp_cele\" is already exists" $TTY NOCLSCR
|
|
fi
|
|
done
|
|
while true;do
|
|
contact_email[$contact_entries]=$(get_userinput "\nEnter Contact email ID (No Spaces in between) : " $TTY NOBLANK NOSPACE ECHO NOCLSCR)
|
|
arr_tmp_cele=${contact_email[$contact_entries]}
|
|
if isduplicate_value ${contact_email[@]}; then
|
|
break
|
|
else
|
|
displayIntro "\n\t\"$arr_tmp_cele\" is already exists" $TTY NOCLSCR
|
|
fi
|
|
done
|
|
|
|
temp=$(get_userinput "\nDo you wish to add one more contact to contact group (y/n) (Blank is n): " $TTY BLANKOK YESNO ECHO NOCLSCR)
|
|
if [ "$temp" != "y" ]; then
|
|
break
|
|
fi
|
|
contact_entries=$(($contact_entries+1))
|
|
done
|
|
fi
|
|
|
|
|
|
while true;do
|
|
contactgroup_members[$contactgroup_entries]=${contact_name[@]}
|
|
arr_tmp_ele=${contact_members[$contactgroup_entries]}
|
|
if isduplicate_value ${contactgroup_members[@]}; then
|
|
break
|
|
else
|
|
displayIntro "\n\t\"$arr_tmp_ele\" is already exists" $TTY NOCLSCR
|
|
fi
|
|
done
|
|
|
|
#temp=$(get_userinput "\nDo you wish to add one more Contact group (y/n) (Blank is n): " $TTY BLANKOK YESNO ECHO NOCLSCR)
|
|
#if [ "$temp" != "y" ]; then
|
|
# break
|
|
#fi
|
|
contactgroup_entries=$(($contactgroup_entries+1))
|
|
#done
|
|
fi
|
|
|
|
}
|
|
|
|
function cfg_check_interval()
|
|
{
|
|
while true; do
|
|
temp=$(get_userinput "\nEnter host group check interval time in minutes (Blank default value - 5 minutes ): " $TTY BLANKOK NOSPACE ECHO NOCLSCR)
|
|
if [ "y$temp" = "y" ]; then
|
|
check_interval=5
|
|
break
|
|
else
|
|
if [[ $temp =~ ^[0-9]+$ ]]; then
|
|
check_interval=5
|
|
break;
|
|
else
|
|
displayIntro "\n\t\"$temp\" is not number" $TTY NOCLSCR
|
|
fi
|
|
fi
|
|
done
|
|
|
|
}
|
|
|
|
function write_config_file {
|
|
local config_gen_file="nagios_hpeilo_cfg_generator"
|
|
get_hpiLO_nagios_install_path
|
|
if [ -f $NAGIOS_INST_PATH/$config_gen_file ]; then
|
|
if [ "$1" = "" ]; then
|
|
nagios_hpilo_cfg_file=$NAGIOS_INST_PATH/$DEFAULT_CONFIG_FILE_NAME
|
|
else
|
|
if [[ $CONFIG_FLAG == "1" ]]; then
|
|
nagios_hpilo_cfg_file=$NAGIOS_INST_PATH/$USER_CONFIG_FILE_NAME.cfg
|
|
else
|
|
nagios_hpilo_cfg_file=$NAGIOS_INST_PATH/$USER_CONFIG_FILE_NAME
|
|
fi
|
|
fi
|
|
|
|
echo -e "\n"
|
|
echo -e "\t\t**************Configured Data****************"
|
|
echo -e "\t\t PASSIVE_DISCOVERY $PASSIVE_DISCOVERY"
|
|
echo -e "\t\t ACTIVE_DISCOVERY $ACTIVE_DISCOVERY"
|
|
for((idx=0;idx<${#hostgreoup_name[@]};idx++)); do
|
|
echo -e "\t\t HOSTGROUP: ${hostgreoup_name[$idx]},${hostgroup_ip[$idx]},${hostgrp_read_comm[$idx]},${hostgrp_trap_comm[$idx]}"
|
|
done
|
|
for((idx=0;idx<${#contactgroup_name[@]};idx++)); do
|
|
echo -e "\t\t CONTACTGROUP: ${contactgroup_name[$idx]},${contactgroup_alias[$idx]},${contactgroup_members[$idx]}"
|
|
done
|
|
for((idx=0;idx<${#contact_name[@]};idx++)); do
|
|
echo -e "\t\t CONTACT: ${contact_name[$idx]},${contact_alias[$idx]},${contact_email[$idx]}"
|
|
done
|
|
echo -e "\t\t CHECK_INTERVAL $check_interval"
|
|
echo -e "\t\t NAGIOS_HOSTIP $nagios_hostip"
|
|
echo -e "\t\t*********************************************"
|
|
local tmp=$(get_userinput "\nDo you wish to write above configured data to host-group configuration file. (y/n) (Blank is y):" $TTY BLANKOK YESNO ECHO NOCLSCR)
|
|
|
|
if [ "$tmp" != "n" ]; then
|
|
touch $nagios_hpilo_cfg_file
|
|
echo "PASSIVE_DISCOVERY $PASSIVE_DISCOVERY" > $nagios_hpilo_cfg_file
|
|
echo "ACTIVE_DISCOVERY $ACTIVE_DISCOVERY" >> $nagios_hpilo_cfg_file
|
|
for((idx=0;idx<${#hostgreoup_name[@]};idx++)); do
|
|
echo "HOSTGROUP: ${hostgreoup_name[$idx]},${hostgroup_ip[$idx]},${hostgrp_read_comm[$idx]},${hostgrp_trap_comm[$idx]}" >> $nagios_hpilo_cfg_file
|
|
done
|
|
for((idx=0;idx<${#contactgroup_name[@]};idx++)); do
|
|
echo "CONTACTGROUP: ${contactgroup_name[$idx]},${contactgroup_alias[$idx]},${contactgroup_members[$idx]}" >> $nagios_hpilo_cfg_file
|
|
done
|
|
for((idx=0;idx<${#contact_name[@]};idx++)); do
|
|
echo "CONTACT: ${contact_name[$idx]},${contact_alias[$idx]},${contact_email[$idx]}" >> $nagios_hpilo_cfg_file
|
|
done
|
|
echo "CHECK_INTERVAL $check_interval" >> $nagios_hpilo_cfg_file
|
|
echo "NAGIOS_HOSTIP $nagios_hostip" >> $nagios_hpilo_cfg_file
|
|
displayIntro "\nHPE iLO host-group configuration file saved at $nagios_hpilo_cfg_file.\n" $TTY NOCLSCR
|
|
else
|
|
echo "Run configuration 'hpeilo_nagios_config' script to setup passive/active discovery"
|
|
exit 1
|
|
fi
|
|
#Check status of ilo.cfg
|
|
Chk_iLOCfgFile
|
|
local temp=$(get_userinput "\nDo you wish to run configuration file to complete the process (y/n) (Blank is y): " $TTY BLANKOK YESNO ECHO NOCLSCR)
|
|
if [ "$temp" != "n" ]; then
|
|
displayIntro "\nRunning configuration file ....\n" $TTY NOCLSCR
|
|
if [ "$ILOCFG" = "1" ]; then
|
|
$NAGIOS_INST_PATH/$config_gen_file -m 3 -s $nagios_hpilo_cfg_file
|
|
else
|
|
$NAGIOS_INST_PATH/$config_gen_file -m 3 -s $nagios_hpilo_cfg_file -o
|
|
fi
|
|
else
|
|
if [ "$ILOCFG" = "1" ]; then
|
|
printf "\nPlease run \"$NAGIOS_INST_PATH/$config_gen_file -m 3 -s $nagios_hpilo_cfg_file \" \nscript manualy to complete the configuration\n" 2>$TTY
|
|
else
|
|
printf "\nPlease run \"$NAGIOS_INST_PATH/$config_gen_file -m 3 -s $nagios_hpilo_cfg_file -o\" \nscript manualy to complete the configuration\n" 2>$TTY
|
|
fi
|
|
fi
|
|
else
|
|
echo
|
|
echo "HPE iLO nagios plugin not installed.Please install and configure."
|
|
fi
|
|
}
|
|
function display_all_intru()
|
|
{
|
|
displayIntro "$HP_iLO_NAGIOS_INTRO" $TTY CLSCR
|
|
echo
|
|
displayIntro "$HP_iLO_NAGIOS_INTRO_1" $TTY NOCLSCR
|
|
echo
|
|
displayIntro "$HP_iLO_NAGIOS_INTRO_2" $TTY NOCLSCR
|
|
echo
|
|
displayIntro "$HP_iLO_NAGIOS_INTRO_3" $TTY NOCLSCR
|
|
echo
|
|
displayIntro "$HP_iLO_NAGIOS_INTRO_4" $TTY NOCLSCR
|
|
echo
|
|
displayIntro "$HP_iLO_NAGIOS_INTRO_n" $TTY NOCLSCR
|
|
|
|
}
|
|
|
|
function get_nagios_cfg_file() {
|
|
local nagios_cfg=
|
|
|
|
|
|
# The format might be like:
|
|
# 1) NagiosIloCfgFile=${prefix}/etc/nagios.cfg
|
|
# 2) NAGIOSCFG="/etc/nagios3/nagios.cfg"
|
|
nagios_cfg=`grep -E "=.*etc.*nagios.cfg" /etc/init.d/nagios* | \
|
|
cut -d '=' -f 2`
|
|
|
|
# trim double quotes
|
|
nagios_cfg=`echo $nagios_cfg | tr -d '"'`
|
|
|
|
if [[ $nagios_cfg = *prefix* ]]; then
|
|
# The /etc/init.d/nagios* has the fomrat like this:
|
|
# NagiosIloCfgFile=${prefix}/etc/nagios.cfg
|
|
# So, we need to replace ${prefix} with the actual value
|
|
|
|
# Find the nagios prefix path
|
|
local nagios_prefix=`grep -i "^prefix=" /etc/init.d/nagios* | \
|
|
cut -d '=' -f 2`
|
|
|
|
# ${prefix}/etc/nagios.cfg -> will be etc/nagios.cfg
|
|
local nagios_suffix=`echo $nagios_cfg | cut -d '/' -f 2-`
|
|
|
|
nagios_cfg="${nagios_prefix}/$nagios_suffix"
|
|
nagios_cfg=`echo $nagios_cfg | sed -r 's/\/\//\//g'`
|
|
fi
|
|
|
|
echo "$nagios_cfg"
|
|
|
|
}
|
|
|
|
#Check ilo.cfg file exist or not
|
|
function Chk_iLOCfgFile()
|
|
{
|
|
local nagios_cfg=$(get_nagios_cfg_file)
|
|
|
|
nagios_conf_path=`dirname $nagios_cfg`
|
|
|
|
if [ -f $nagios_conf_path/$iLO_CFGFILE ]; then
|
|
local tmp=$(get_userinput "\nHPE iLO Hosts/Services discovered configuration file is existing:$nagios_conf_path/$iLO_CFGFILE\nDo you wish to replace it?(y/n) (Blank is y): " $TTY BLANKOK YESNO ECHO NOCLSCR)
|
|
fi
|
|
if [ "$tmp" = "n" ]; then
|
|
ILOCFG=1 #update the ilo.cfg file
|
|
fi
|
|
}
|
|
|
|
function chk_cfg_file()
|
|
{
|
|
local iLO_nagios_cfg_plugin="nagios_hpeilo_cfg_generator"
|
|
get_hpiLO_nagios_install_path
|
|
if [ -f $NAGIOS_INST_PATH/$DEFAULT_CONFIG_FILE_NAME ]; then
|
|
local temp=$(get_userinput "\nDefault: \"$DEFAULT_CONFIG_FILE_NAME\" Already Exists.\nDo you wish to replace it? (y/n)(Blank is n): " $TTY BLANKOK YESNO ECHO NOCLSCR)
|
|
if [ "$temp" != "y" ]; then
|
|
echo "Enter new config file name [Note: No space allowed]"
|
|
|
|
while read USER_CONFIG_FILE_NAME
|
|
do
|
|
# ignore the space line
|
|
if [ "x${USER_CONFIG_FILE_NAME}" = "x" ]; then
|
|
continue
|
|
fi
|
|
|
|
# ignore the comment lines
|
|
if [ "x$(echo -n $USER_CONFIG_FILE_NAME | grep -E \"^#\")" != "x" ]; then
|
|
echo "Special characters are not allowed "
|
|
continue
|
|
fi
|
|
|
|
if [ -f "$USER_CONFIG_FILE_NAME" ]
|
|
then
|
|
echo "The file '$USER_CONFIG_FILE_NAME' exists.Try another name"
|
|
continue
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
if [[ $USER_CONFIG_FILE_NAME != "*.cfg" ]]; then
|
|
CONFIG_FLAG=1
|
|
fi
|
|
main_func
|
|
write_config_file $USER_CONFIG_FILE_NAME
|
|
|
|
else
|
|
cat /dev/null > $NAGIOS_INST_PATH/$DEFAULT_CONFIG_FILE_NAME
|
|
main_func
|
|
write_config_file
|
|
fi
|
|
else
|
|
main_func
|
|
write_config_file
|
|
fi
|
|
}
|
|
|
|
function main_func()
|
|
{
|
|
cfg_passive_enable_value
|
|
cfg_active_enable_value
|
|
cfg_hostgroup
|
|
cfg_contactgroup
|
|
cfg_check_interval
|
|
}
|
|
|
|
#main
|
|
echo $COLUMNS
|
|
get_installmode TTY
|
|
display_all_intru
|
|
cfg_monitor_host_ip
|
|
chk_cfg_file
|