"Ajout ctl_vm.sh"

This commit is contained in:
Doug Le Tough 2017-07-23 10:10:58 +02:00
parent 52a08ae3e7
commit 4869d2073a
3 changed files with 162 additions and 0 deletions

152
bin/ctl_vm.sh Normal file
View File

@ -0,0 +1,152 @@
!/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

8
conf/ctl_vm.conf Normal file
View File

@ -0,0 +1,8 @@
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

2
msg/ctl_vm.msg Normal file
View File

@ -0,0 +1,2 @@
2 | erreur | stop | ${ERROR}
3 | erreur | continu | ${ERROR}