2023-11-24 09:47:08 +01:00

173 lines
5.0 KiB
Bash

#!/usr/bin/env bash
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# Health check script for the Secondary Storage VM
# DNS server is specified.
CMDLINE=/var/cache/cloud/cmdline
for i in `cat $CMDLINE`
do
key=`echo $i | cut -d= -f1`
value=`echo $i | cut -d= -f2`
case $key in
host)
MGMTSERVER=$value
;;
esac
done
isCifs() {
mount | grep "type cifs" > /dev/null
echo $?
}
# ping dns server
echo ================================================
DNSSERVER=`egrep '^nameserver' /etc/resolv.conf | awk '{print $2}'| head -1`
echo "First DNS server is " $DNSSERVER
ping -c 2 $DNSSERVER
if [ $? -eq 0 ]
then
echo "Good: Can ping DNS server"
else
echo "WARNING: cannot ping DNS server"
echo "route follows"
route -n
fi
# check dns resolve
echo ================================================
nslookup cloudstack.apache.org 1> /tmp/dns 2>&1
grep 'no servers could' /tmp/dns 1> /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "ERROR: DNS not resolving cloudstack.apache.org"
echo resolv.conf follows
cat /etc/resolv.conf
exit 2
else
echo "Good: DNS resolves cloudstack.apache.org"
fi
# check to see if we have the NFS volume mounted
echo ================================================
storage="cifs"
if [ $(isCifs) -ne 0 ] ;
then
storage="nfs"
fi
mount|grep -v sunrpc|grep -v rpc_pipefs|grep $storage 1> /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "$storage is currently mounted"
# check for write access
for MOUNTPT in `mount|grep -v sunrpc|grep -v rpc_pipefs|grep $storage| awk '{print $3}'`
do
if [ $MOUNTPT != "/proc/xen" ] # mounted by xen
then
echo Mount point is $MOUNTPT
touch $MOUNTPT/foo
if [ $? -eq 0 ]
then
echo "Good: Can write to mount point"
rm $MOUNTPT/foo
else
echo "ERROR: Cannot write to mount point"
echo "You need to export with norootsquash"
fi
fi
done
else
echo "ERROR: Storage $storage is not currently mounted"
echo "Verifying if we can at least ping the storage"
STORAGE_ADDRESSES=`grep "secondaryStorageServerAddress" $CMDLINE | sed -E 's/.*secondaryStorageServerAddress=([^ ]*).*/\1/g'`
if [[ -z "$STORAGE_ADDRESSES" ]]
then
STORAGE_NETWORK_GATEWAY=`grep "storagegateway" $CMDLINE | sed -E 's/.*storagegateway=([^ ]*).*/\1/g'`
echo "Storage address list is empty, trying to ping storage network gateway instead ($STORAGE_NETWORK_GATEWAY)"
ping -c 2 $STORAGE_NETWORK_GATEWAY
if [ $? -eq 0 ]
then
echo "Good: Can ping $storage storage network gateway"
else
echo "WARNING: Cannot ping $storage storage network gateway"
echo routing table follows
route -n
fi
else
echo "Storage address(s): $STORAGE_ADDRESSES, trying to ping"
STORAGE_ADDRESS_LIST=$(echo $STORAGE_ADDRESSES | tr "," "\n")
for STORAGE_ADDRESS in $STORAGE_ADDRESS_LIST
do
echo "Pinging storage address: $STORAGE_ADDRESS"
ping -c 2 $STORAGE_ADDRESS
if [ $? -eq 0 ]
then
echo "Good: Can ping $storage storage address"
else
echo "WARNING: Cannot ping $storage storage address"
echo routing table follows
route -n
fi
done
fi
fi
# check for connectivity to the management server
echo ================================================
echo Management server is $MGMTSERVER. Checking connectivity.
IFS=',' read -r -a hosts <<< "$MGMTSERVER"
for host in "${hosts[@]}"
do
socatout=$(echo | socat - TCP:$host:8250,connect-timeout=3 | tr -d '\0' 2>&1)
if [ $? -eq 0 ]
then
echo "Good: Can connect to management server $host port 8250"
else
echo "ERROR: Cannot connect to $host port 8250"
echo $socatout
exit 4
fi
done
# check for the java process running
echo ================================================
ps -eaf|grep -v grep|grep java 1> /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "Good: Java process is running"
else
echo "ERROR: Java process not running. Try restarting the SSVM."
exit 3
fi
echo ================================================
echo Tests Complete. Look for ERROR or WARNING above.
exit 0