83 lines
2.9 KiB
Bash
Executable File
83 lines
2.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
CMD="ANSIBLE_RETRY_FILES_ENABLED=0 ansible-playbook -e @config.yml roles/recette.yml"
|
|
DEPS=("ansible-playbook" "grep")
|
|
REMOTE=false
|
|
|
|
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
|
|
|
|
for arg in "$@"; do
|
|
if [[ $arg = "remote" ]]; then
|
|
REMOTE=true
|
|
CMD="$CMD -i hosts"
|
|
fi
|
|
if [[ $arg = "check" ]]; then
|
|
CMD="$CMD --syntax-check"
|
|
fi
|
|
if [[ $arg = "debug" ]] || [[ $arg = "-vvv" ]]; then
|
|
CMD="$CMD -vvv"
|
|
fi
|
|
if [[ $arg = "verbose" ]] || [[ $arg = "-v" ]]; then
|
|
CMD="$CMD -v"
|
|
fi
|
|
done
|
|
|
|
if [[ $REMOTE = false ]]; then
|
|
# 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
|
|
|
|
# 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=$?
|
|
|
|
cur_host="$(cat /etc/hostname)"
|
|
if [[ "$cur_host" != "fr" ]] && [[ $FR = 0 ]]; then
|
|
echo "ERREUR DE CONFIGURATION"
|
|
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
|
|
exit 1
|
|
fi
|
|
|
|
# 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
|
|
|
|
CMD="$CMD --connection=local --inventory 127.0.0.1, --limit 127.0.0.1"
|
|
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
|
|
|
|
CMD="$CMD -i hosts"
|
|
fi
|
|
|
|
eval $CMD
|