2020-04-11 00:19:03 +00:00
#!/bin/bash
2020-04-11 23:00:17 +00:00
2020-04-16 11:39:48 +00:00
CMD = "ANSIBLE_RETRY_FILES_ENABLED=0 ansible-playbook -e @config.yml roles/recette.yml"
2020-04-16 10:45:11 +00:00
DEPS = ( "ansible-playbook" "grep" )
REMOTE = false
2020-04-16 09:53:39 +00:00
doc_admin( ) {
echo " Pour plus d'information sur l'installation/configuration du serveur, se référer au manuel d'administration."
echo " ~~> docs/administrateurice.md"
}
# Vérifier que les dépendances sont installées, des fois qu'une personne n'aurait pas lu la doc
for dep in ${ DEPS [*] } ; do
which " $dep " > /dev/null
if [ [ $? != 0 ] ] ; then
echo " ERREUR: La commande $dep n'existe pas dans mon \$PATH. "
echo " Notre recette a besoin des programmes suivants: $DEPS "
doc_admin
exit 2
fi
done
2020-04-15 13:37:47 +00:00
for arg in " $@ " ; do
2020-04-15 17:10:38 +00:00
if [ [ $arg = "remote" ] ] ; then
2020-04-15 20:19:35 +00:00
REMOTE = true
2020-04-15 17:10:38 +00:00
CMD = " $CMD -i hosts "
2020-04-15 13:37:47 +00:00
fi
if [ [ $arg = "check" ] ] ; then
CMD = " $CMD --syntax-check "
fi
2020-04-17 11:47:11 +00:00
if [ [ $arg = "debug" ] ] || [ [ $arg = "-vvv" ] ] ; then
2020-04-15 20:19:35 +00:00
CMD = " $CMD -vvv "
fi
2020-04-17 11:47:11 +00:00
if [ [ $arg = "verbose" ] ] || [ [ $arg = "-v" ] ] ; then
CMD = " $CMD -v "
fi
2020-04-15 13:37:47 +00:00
done
2020-04-15 20:19:35 +00:00
if [ [ $REMOTE = false ] ] ; then
2020-04-16 09:59:02 +00:00
# Vérifier que la distribution est bien Debian buster, sinon on risque de tout casser
grep "Debian GNU/Linux 10" /etc/issue > /dev/null
if [ [ $? != 0 ] ] ; then
echo "ERREUR: Cette recette ne fonctionne que sur Debian 10 Buster! /etc/issue n'indique pas qu'on est sur buster."
doc_admin
exit 3
fi
2020-04-16 09:31:18 +00:00
# Sécurité pour empêcher une personne d'appliquer par erreur le playbook de ~fr sur son propre serveur
# Si le hostname dans config.yml est configuré pour fr.tild3.org mais que /etc/hostname n'est pas "fr",
# alors on ne fait rien... sauf bien sûr en mode remote.
grep -E " ^hostname:.*?fr.tild3.org.*? $" config.yml > /dev/null
FR = $?
2020-04-16 09:53:39 +00:00
cur_host = " $( cat /etc/hostname) "
if [ [ " $cur_host " != "fr" ] ] && [ [ $FR = 0 ] ] ; then
2020-04-16 09:31:18 +00:00
echo "ERREUR DE CONFIGURATION"
2020-04-16 09:53:39 +00:00
echo " Tu essayes d'appliquer la recette avec la configuration du serveur ~fr (hostname: fr.tild3.org), pourtant il semble que ce serveur n'est pas ~fr (/etc/hostname = $cur_host ). "
echo " Pour configurer ton serveur de zéro, tu peux partir du fichier d'exemple config.default.yml."
doc_admin
2020-04-16 09:31:18 +00:00
exit 1
fi
2020-04-16 09:34:54 +00:00
# Vérifier qu'on exécute le playbook en root, sinon on a pas assez de privilèges et ça ne sert à rien!
if [ [ " $EUID " != 0 ] ] ; then
echo "ERREUR: Ce script doit être exécuté en root si exécuté localement."
echo " Tu veux que je configure quoi pour toi si j'ai pas les permissions? ;)"
exit 2
fi
2020-04-16 09:59:02 +00:00
2020-04-15 20:19:35 +00:00
CMD = " $CMD --connection=local --inventory 127.0.0.1, --limit 127.0.0.1 "
2020-04-16 11:13:56 +00:00
else
# Running remotely, ensure there's a hosts file
if [ ! -f ./hosts ] ; then
echo "ERREUR: On a besoin d'un fichier hosts pour appliquer la recette à distance."
doc_admin
exit 4
fi
2020-04-16 11:36:53 +00:00
CMD = " $CMD -i hosts "
2020-04-15 20:19:35 +00:00
fi
2020-04-15 13:37:47 +00:00
eval $CMD