socle_bash/bin/ctl_vm.sh

153 lines
4.9 KiB
Bash
Raw Normal View History

2017-07-23 10:10:58 +02:00
!/bin/bash
#------------------------------------------------------------------------------------------------------------------
# Script : ctl_vm.sh
# Auteur : Doug Le Tough
# Date : 23-07-2017
# Version : 1.0.0
# Objet : Vérifie l'état des VM de l'infrastructure
#
#------------------------------------------------------------------------------------------------------------------
# Mise a jour :
#
# 1.0.0 23/07/2017 - Doug Le Tough - Cre : Mise en production
#
#------------------------------------------------------------------------------------------------------------------
# Liste des options et arguments:
#
# Ce script n'accepte *aucune* option
#
# @OPT: f:bidon::::::
#
#------------------------------------------------------------------------------------------------------------------
# Liste des erreurs:
#
# 2 | erreur | stop | ${ERROR}
# 3 | erreur | continu | ${ERROR}
#
#------------------------------------------------------------------------------------------------------------------
# Liste des paramètres de configuration:
#
# NUC=nuc.local.tetalab.org
# NUC_SSH_PORT=2022
# IRC_BOT=/usr/local/bin/tetalab/ircbot.py
# TETALAB_VM[0]=jimmy.local.tetalab.org
# TETALAB_VM[1]=billy.local.tetalab.org
# TETALAB_VM[2]=marian.local.tetalab.org
# TETALAB_VM[3]=sonny.local.tetalab.org
# TETALAB_VM[4]=web.local.tetalab.org
#
#------------------------------------------------------------------------------------------------------------------
##
## Syntaxe :
## --------
##
## prompt> ctl_vm.sh
##
## ex:
## ctl_vm.sh
##
## Prérequis:
## ----------
## - Le script doit être executé par l'utilisateur asr sur sousetsuken
##
## Fonctionnement:
## ---------------
## Depuis sousetsuken se connecte sur le Nuc et vérifie l'état des VM inscrite dans le fichier de configuration
## et notifie les incidents sur freenode.net#tetalab
##
#------------------------------------------------------------------------------------------------------------------
# Initialisation de l'environement
#------------------------------------------------------------------------------------------------------------------
if [ "${USER}" != "asr" ]; then
ERROR="Seul l'utilisateur asr peut utiliser ce script"
echo -e "\033[91m${ERROR}\033[0m"
exit 1
fi
source /etc/profile.d/tetalab.sh
if [ ! -f ${NC_EXPL_CFG}/init.conf ]; then
echo "Le fichier d'initialisation du socle \${NC_EXPL_CFG}/init.conf n'existe pas !"
echo "Arrêt du script par sécurité"
exit 250
fi
source ${NC_EXPL_CFG}/init.conf
#------------------------------------------------------------------------------------------------------------------
# Fonctions
#------------------------------------------------------------------------------------------------------------------
function check_config
{
fct_message "Vérification de la configuration:" -color jaune
if [ ! -r ${SH_FICCFG} ]; then
ERROR="Fichier de configuration ${SH_FICCFG} absent ou illisible"
fct_erreur 2
fi
if [ ${#NUC} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: NUC"
fct_erreur 2
fi
if [ ${#NUC_SSH_PORT} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: NUC_SSH_PORT"
fct_erreur 2
fi
if [ ${#IRC_BOT} -eq 0 ]; then
ERROR="Paramètre manquant ou vide dans le fichier de configuration: IRC_BOT"
fct_erreur 2
fi
if [ ${#TETALAB_VM[*]} -eq 0 ]; then
ERROR="Aucune VM définie dans le fichier de configuration"
fct_erreur 2
fi
fct_message " * NUC: ${NUC}"
fct_message " * NUC_SSH_PORT: ${NUC_SSH_PORT}"
fct_message " * IRC_BOT: ${IRC_BOT}"
INDEX=0
for VM in ${TETALAB_VM[@]}
do
fct_message " * VM[${INDEX}]: ${VM}"
INDEX=$(( INDEX+1 ))
done
}
function check_vm
{
fct_message "Vérification de l'état des VM:" -color jaune
for VM in ${TETALAB_VM[@]}
do
VM_STATUS=$(ssh ${NUC} -p ${NUC_SSH_PORT} "/usr/bin/sudo virsh domstate ${VM} 2>/dev/null | grep running | wc -l")
if [ ! ${VM_STATUS} -eq 1 ]; then
VM_STATUS=$(ssh ${NUC} -p ${NUC_SSH_PORT} "/usr/bin/sudo virsh domstate ${VM} 2>/dev/null | head -n1")
VM_STATUS="${VM}: VM is ${VM_STATUS}"
fct_message " - ${VM_STATUS}" -color rose
MESSAGE="${MESSAGE}|||${VM_STATUS}"
continue
fi
VM_STATUS="${VM}: VM is running"
fct_message " - ${VM_STATUS}" -color vert
done
}
function send_message
{
if [ ${#MESSAGE} -eq 0 ]; then
fct_message "Aucun message à envoyer" -color jaune
fct_erreur 0
fi
fct_message "Envoi du message ${MESSAGE}" -color jaune
${IRC_BOT} "${MESSAGE}"
}
#------------------------------------------------------------------------------------------------------------------
# Traitement
#------------------------------------------------------------------------------------------------------------------
MESSAGE=""
check_config
check_vm
send_message
fct_erreur 0