Ansible est un logiciel libre qui permet le déploiement ou l’automatisation de tâches d’administrations vers plusieurs serveurs distant en même temps, quelque soit leur système d’exploitation. Ce qui est intéressent avec Ansible, pas besoin d’installer d’agent sur les serveurs, seul le déploiement de la clé public du serveur Ansible est nécessaire, car les connexions se font via ssh.
Installation d’Ansible sous Debian 9
Rien de bien compliqué pour l’installation d’Ansible sous Debian, car le paquet est disponible dans les dépôts en version 2.2 sous Stretch.
apt install ansible
Configuration de Ansible
Les fichiers de configuration d’Ansible se trouvent dans le répertoire /etc/ansible
.
Dans cet article, je ne rentrerais pas dans les détails du fichier de configuration ansible.cfg
car de base il est fonctionnel, ça sera un sujet d’un futur article.
Le premier fichier renseigné est /etc/ansible/hosts
. Dans ce fichier se trouvera tous les serveurs qui seront administrés par Ansible. Dans ce fichier, il est possible de créer des groupes d’hôtes, ce qui facilite la gestion multiple.
Plusieurs façon de faire pour renseigner les hôtes gérés par Ansible, soit renseigner les adresses IP, soit le FQDN ou un nom d’hôte. Si le choix est le nom d’hôte, il faut qu’il soit connu du système, donc il faudra aussi renseigner le fichier /etc/hosts
.
nano /etc/ansible/hosts
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub root@serveur-cible
A partir de maintenant, Ansible est prêt pour exécuter des actions sur les serveurs cibles.
Mes premiers test avec Ansible
- test de ping sur le groupe poller-centreon :
ansible -m ping poller-centreon --one-line
ansible -m apt -a 'name=debian-goodies' pve_v5
Playbooks
Dans l’exemple précédant, seul la commande ping a été exécutée. Si l’on souhaite exécuter un ensemble de commande ou de script, il faut passer par des playbooks. Ces playbooks sont au format YAML. Les playbboks peuvent être placés dans un sous répertoire, qui n’a pas été créé lors de l’installation d’Ansible.
- Création d’un sous répertoire pour les playbooks :
mkdir /etc/ansible/playbooks
nano /etc/ansible/playbooks/mon_premier_playbooks.yml
- Pour reprendre un exemple de ping :
- hosts: all tasks: - action: ping
ansible-playbook /etc/ansible/playbooks/mon_premier_playbooks.yml
- hosts: poller-centreon tasks: - name: version du moteur centengine shell: centengine -V | awk '{print $5}' | head -n 1 register: release - name: Mise à jour des paquet yum: name=* state=latest - name: Vérification de la version de Centengine après mise à jour shell: centengine -V | awk '{print $5}' | head -n 1 register: new_release - name: Affichage de la version de Centengine debug: msg="Version de Centengine {{ new_release.stdout_lines }}" - name: Notification de la mise à niveau de la version de Centengine debug: msg="PVE à changé de version {{ release.stdout }} à {{ new_release.stdout }}" when: release.stdout != new_release.stdout - name: vérification des services à redémarrer shell: needs-restarting | awk '{print $3}' register: services - name: Liste des service à redémarrer debug: msg="{{ services.stdout_lines | count }} services à redémarrer ({{ services.stdout_lines | join (', ') }})"
ansible-playbook monplaybook.yml
Ce playbook va seulement s’exécuter sur les serveurs membres du goupe poller-centreon. A savoir, le système d’exploitation de mes poller est CentOS.
Merci pour cet article très clair.
L’exemple concret à la fin permet de se faire une idée précise de l’utilité d’Ansible.