Présentation Ansible :
Ansible est un « open source configuration management software » qui permet donc d’automatiser la gestion et la configuration de son infrastructure sous Linux.
Il fonctionne de la manière suivante :
Le serveur Ansible répertorie les différents serveurs à administrer dans un fichier « hosts ». Ce serveur va ensuite exécuter des « playbooks » (une suite d’action scriptée en format YAML) et effectuer des tâches d’administration à distance (via SSH), sans aucune interaction humaine.
Les grandes forces d’Ansible sont :
- La simplicité : Il est plus facile d’apprendre à utiliser Ansible que d’outils de configuration management comme Puppet.
- Pas de client à installer sur les serveurs cibles : Ansible utilise uniquement SSH.
- Outil intelligent : Comme le décrit si bien le site officiel du projet, Ansible se concentre uniquement sur le résultat. Si le playbook demande d’installer un logiciel déjà installé, il ne se passera rien et vous en serez notifié. Vous pouvez également n’effectuer qu’un upgrade de vos logiciels.
Note : Depuis la version 1.7 Ansible peut aussi fonctionner sur Windows, dans ce cas il n’utilise plus SSH pour l’administration à distance mais Powershell (winrm).
Contexte :
Je vais m’occuper dans cet article de reporter uniquement mes notes suite à mon lab virtuel d’introduction à Ansible. Mes tests n’étant pas complètement terminés sur cet outil…
Ceci n’est donc ni un tuto, ni une présentation complète de cet outil.
Lab :
J’ai utilisé 3 VM sous VirtualBox pour monter ce lab : une VM serveur Ansible et deux VM WebServer1 et WebServer2 (pour tester le déploiement sur de multiples hosts en même temps).
Toutes mes VMs tournent sous Debian 8.6
Ansible : 10.0.0.5 WebServer1 : 10.0.0.4 WebServer2: 10.0.0.6
Mes notes :
Installation d’Ansible sous Debian
apt-get install software-properties-common apt-add-repositery -y ppa:ansible/ansible apt-get updateapt-get install -y ansible
Après l’installation d’Ansible, un fichier hosts est créé pour servir d’exemple très bien détaillé sur comment renseigner les serveurs distants à administrer. /etc/ansible/hosts
Pour qu’Ansible puisse se connecter à distance sur nos serveurs, nous devons au préalable partager la clé publique sur ces serveurs:
ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub fred@10.0.0.4 ssh-copy-id -i ~/.ssh/id_rsa.pub fred@10.0.0.6
Test du fonctionnement de la connection SSH d’Ansible sur mes serveurs distants (renseignés dans le fichier hosts dans un groupe nommé « web ») :
ansible web -m ping
À noter que la demande du pass pour sudo est une modification que j’ai apportée au fichier de configuration d’Ansible (/etc/ansible/ansible.cfg) :
ask_sudo_pass = True
Il est aussi possible de renseigner le mot de passe root dans un fichier. Il faudra alors crypter ce fichier par sécurité avec Vault :
export EDITOR="/usr/bin/nano"ansible-vault create pass.yml
Voici mon playbook de test pour l’installation d’Apache / MySQL / PHP sur mes deux serveurs Web :
Pour exécuter le playbook voici différentes méthodes :
ansible-playbook playbook.yml --verbose ansible-playbook playbook.yml --user=fred --ask-sudo-pass ansible-playbook playbook.yml --vault-password-file=pass.yml
Lancement du playbook depuis le serveur Ansible :
Ici on peut voir le statut de nos actions : OK=4 (pas d’installation car logiciels déjà présents sur le serveur cible) changed=2 (2 installations effectuées par Ansible).
La couleur orange représente les modifications effectuées par Ansible. Dans cette capture d’écran Ansible a installé Apache et PHP sur le serveur web 10.0.0.6.
Si je relance la même commande, cette fois tout est à « OK » : Ansible ne fait rien car tout est déjà installé (tout est vert) !
La prochaine étape de mes tests sera d’installer un serveur MySQL en réplication Master-Slave. Pour cela il va me falloir jouer avec les variables sous Ansible…
Comments (0)