(SISR2-2016) Anthony Varin, Alexandre Saligny
par Valentin Pepin, Benjamin Hohn (SISR2-2020)
Ansible est un outil d'automatisation de tâches (déploiement de logiciels et mise à jours)
Outils:
Remarque:
echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main" >> /etc/apt/sources.list apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
apt update
apt install ansible
Pour enregistrer les différente machine cible (hôte) on modifie le fichier /etc/ansible/hosts en ajoutant a la fin du fichier les adresse IP ou les FQDN des hôtes, rassemblés par [groupes] :
# This is the default ansible 'hosts' file. # # It should live in /etc/ansible/hosts ... # - A hostname/ip can be a member of multiple groups # Ex 1: Ungrouped hosts, specify before any group headers. #green.example.com ... #db-[99:101]-node.example.com [nom du groupe] ip machine ip machine
Une machine peut apparaître dans plusieurs [groupes].
Pour pouvoir entrer en contact avec les hôtes cible, on établira une connexion récurrente grâce à SSH :
ssh-keygen –t {rsa|dsa} [-b <nombre_bits>]
ssh-copy-id -i <chemin/clé_publique> <compte>@<IP_ou_FQDN_cible>
Pour tester la connexion entre ansible et les machines cibles on utilise la commande:
ansible all -m ping -u <nom du compte utilisé par le ssh>
Si la communication est établie, on obtient:
ipmachine | success >> { "changed": false, "ping": "pong" }
Il faut créer un dossier playbook dans le dossier /etc/ansible pour pouvoir stocker un script
Structure d'un script
Crée un fichier YAML <nom-du-fichier>.yml
- hosts: <Groupe, ip, nom> become: yes become_method: sudo tasks: - name: mise a jour des serveurs apt: update_cache=yes
Dans cette version, il faudra :
Procédure : 1. Créer un fichier crypté stockant le mot de passe mpsudo<script .sh>:
ansible-vault create <nom du fichier.sh>
Le mot de passe mpcrypt vous sera demandé pour la création de ce fichier.
2. Enregistrer ce mot de passe mpcrypt dans un fichier .txt avec droit d'écriture et de lecture seulement pour le compte root.
3. Déployer le script
ansible-playbook <nom du script.yml> -u root --vault-password-file=<nom du fichier txt contenant le mot de passe crypt>
ansible-playbook <nom du script> -u root --ask-sudo-pass
Automatisation pour l'exécution de plusieurs playbook
Le script suivant permet d'exécuter une liste de playbook à la suite
#script nommé autoPlaybooks.sh ansible-playbook $1 --vault-password-file=<nom du fichier contenant le mot de passe du fichier crypté> ansible-playbook $2 --vault-password-file=<nom du fichier contenant le mot de passe du fichier crypté> ... ansible-playbook $x --vault-password-file=<nom du fichier contenant le mot de passe du fichier crypté>
<script .sh> Pour exécuter le script autoPlaybooks.sh:
./autoPlaybooks.sh <playbook1.yml> <playbook2.yml> ...