MrKen
July 3, 2009, 2:13am
1
Hi all,
I am trying to pull one value from a Mapfile, but the result is that I am getting all the values. The Mapfile maps the host name from the Backup Server to the host name in our Network Monitoring Server, as shown here:
Mapfile
cat zabbixhosts
Helpdesk-fd:Server_Helpdesk
Knowledge-fd:Server_Knowledge
BaculaServer-fd:Server_Bacula
Zabbix-fd:Server_Zabbix_1.4.2
The section of script that is failing is here:
client=$(tail -n 38 /var/lib/bacula/log | grep -m 1 -F "Client" | awk -F" " '{ print $2; }')
echo Client is $client
echo
# get hostname from the Hostsfile
ZABBIX_HOST=`grep "[$client]" $ZABBIX_HOSTSFILE`
if [ $? -eq 0 ]; then
hostname=`echo "$ZABBIX_HOST" | cut -f2 -d:`
else
hostname=""
fi
echo Hostname is $hostname
When I run that script the output is as follows:
./bacula2zabbix.sh
Client is "BaculaServer-fd"
Hostname is Server_Helpdesk Server_Knowledge Server_Bacula Server_Zabbix_1.4.2
Any advice would be greatly appreciated.
Thanks.
I tried the same code snippet.The result is
Client is "BaculaServer-fd"
Hostname is Server_Bacula
ZABBIX_HOSTSFILE="path of map file"
I made two changes:
1.Initialized ZABBIX_HOSTSFILE to map file name
2.Removed []
grep "[$client]" $ZABBIX_HOSTSFILE
grep "$client" $ZABBIX_HOSTSFILE
MrKen
July 3, 2009, 2:59am
3
Thanks for the quick reply.
When you say 'initialize' the host file name, I guess you mean do I have this:
ZABBIX_HOSTSFILE="/etc/bacula/zabbixhosts";
Yes, I have that already. That's why there is a result to the output in the first post.
When I remove the [ ] as suggested, the output is now:
Client is "BaculaServer-fd"
Hostname is
Any more ideas?
hostname=`grep $client zabbixhosts | cut -f2 -d:`
I tried to simulate your scenario in my linux machine. Assuming that your client variable contains <BaculaServer-fd >.
From the above code, variable hostname contains Server_Bacula if grep is successfull and will contain no value if it fails. Something like this....
$ cat zabbixhosts
Helpdesk-fd:Server_Helpdesk
Knowledge-fd:Server_Knowledge
BaculaServer-fd:Server_Bacula
Zabbix-fd:Server_Zabbix_1.4.2
$ echo $client
sai
$ hostname=`grep $client zabbixhosts | cut -f2 -d:` ; echo $hostname
$ client="BaculaServer-fd"
$ hostname=`grep $client zabbixhosts | cut -f2 -d:` ; echo $hostname
Server_Bacula
$ hostname=`grep -w $client zabbixhosts | cut -f2 -d:`; echo $hostname
Server_Bacula
MrKen
July 3, 2009, 4:35am
5
reddybs, thanks for your reply.
If I change "[$client]" to $client, then I get no hostname output.
If I use -w with grep, then I get no hostname output.
So now I have this, but still the output is incorrect.
echo Client is $client
echo
# get hostname from the Hostsfile
hostname=`grep "[$client]" $ZABBIX_HOSTSFILE | cut -f2 -d:` ; echo $hostname
and the output:
Client is "BaculaServer-fd"
Server_Helpdesk Server_Knowledge Server_Bacula Server_Zabbix_1.4.2
Any more ideas?