Nous allons directement plonger dans les concepts et composants fondamentaux qui vous aideront à maîtriser Ansible. Ce tutoriel suppose que vous avez déjà installé Ansible sur votre système et que vous avez une compréhension de base de ce qu’est Ansible.
Configuration de l’environnement
Génération de clés SSH
Si ce n’est pas déjà fait, générez une paire de clés SSH sur votre nœud de contrôle Ansible.
ssh-keygen -t rsa
Distribution des clés SSH
Copiez la clé publique SSH sur tous vos nœuds cibles.
ssh-copy-id username@target_host
Remplacez username par l’utilisateur approprié et target_host par l’adresse IP ou le nom d’hôte du nœud cible.
Fichiers d’inventaire
Inventaire simple
Créez un fichier d’inventaire simple avec l’extension .ini.
# my_inventory.ini
[web]
192.168.1.2
[db]
192.168.1.3
Inventaire dynamique
Vous pouvez également utiliser des scripts d’inventaire dynamique. Ansible prend en charge les scripts qui produisent du JSON.
#!/usr/bin/python
import json
inventory = {
"web": ["192.168.1.2"],
"db": ["192.168.1.3"]
}
print(json.dumps(inventory))
Commandes ad-hoc
Exécutez des commandes directement sur vos nœuds.
ansible web -i my_inventory.ini -m ping
Cela exécutera le module ping sur tous les nœuds du groupe [web] dans my_inventory.ini.
Rédaction de playbooks
Votre premier playbook
Créez un fichier YAML nommé my_first_playbook.yml.
---
- name: Mon premier playbook
hosts: web
tasks:
- name: Installer Nginx
apt:
name: nginx
state: present
Exécutez le playbook avec la commande ansible-playbook.
ansible-playbook -i my_inventory.ini my_first_playbook.yml
Playbook multi-tâches
Vous pouvez avoir plusieurs tâches dans un playbook.
---
- name: Configuration du serveur web
hosts: web
tasks:
- name: Installer Nginx
apt:
name: nginx
state: present
- name: Démarrer le service Nginx
service:
name: nginx
state: started
Rôles et playbooks basés sur les rôles
Les rôles vous permettent d’organiser vos playbooks en composants réutilisables.
ansible-galaxy init web-server
Cela créera un répertoire de rôle web-server avec divers sous-répertoires (tasks, vars, templates, etc.).
Utilisation des rôles dans un playbook
---
- name: Playbook basé sur les rôles
hosts: web
roles:
- web-server
Variables de rôle
Dans web-server/vars/main.yml, définissez quelques variables.
http_port: 80
https_port: 443
Dans web-server/tasks/main.yml, utilisez ces variables.
---
- name: Configurer Nginx
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
vars:
http_port: "{{ http_port }}"
https_port: "{{ https_port }}"
Variables et faits
Variables de playbook
Définissez des variables dans vos playbooks.
---
- name: Exemple de variable
hosts: web
vars:
my_variable: "Bonjour, le monde !"
Collecte de faits
Ansible peut collecter des faits (informations système) sur les nœuds cibles.
---
- name: Collecte de faits
hosts: all
tasks:
- setup:
Conditions et boucles
Conditions
Exécutez des tâches de façon conditionnelle.
---
- name: Playbook conditionnel
hosts: all
tasks:
- name: Installer Apache si le système est Ubuntu
apt:
name: apache2
state: present
when: ansible_facts['os_family'] == "Debian"
Boucles
Exécutez des tâches en boucle.
---
- name: Exemple de boucle
hosts: all
tasks:
- name: Installer plusieurs paquets
apt:
name: "{{ item }}"
state: present
loop:
- git
- vim
- curl
Modèles et fichiers
Notions de base des modèles
Ansible utilise Jinja2 pour les modèles. Créez un fichier modèle avec l’extension .j2.
# my_template.j2
Bonjour, {{ my_variable }} !
Utilisation des modèles dans les tâches
---
- name: Exemple de modèle
hosts: web
tasks:
- name: Déployer le modèle
template:
src: my_template.j2
dest: /tmp/my_template.txt
vars:
my_variable: "Monde"
Concepts avancés
Balises
Utilisez des balises pour exécuter sélectivement des tâches spécifiques.
---
- name: Exemple de balise
hosts: all
tasks:
- name: Installer Nginx
apt:
name: nginx
state: present
tags: ["web"]
Exécutez uniquement les tâches balisées.
ansible-playbook -i my_inventory.ini my_playbook.yml --tags "web"
Gestion des erreurs
Ajoutez une gestion des erreurs à vos playbooks.
---
- name: Exemple de gestion des erreurs
hosts: all
tasks:
- name: Essayer d'installer un paquet
apt:
name: some-nonexistent-package
state: present
ignore_errors: true
Dépannage et débogage
Sortie verbeuse
Exécutez les commandes Ansible avec -vvv pour une sortie verbeuse.
ansible-playbook -i my_inventory.ini my_playbook.yml -vvv
Module debug
Utilisez le module debug pour afficher des variables.
---
- name: Exemple de débogage
hosts: all
tasks:
- debug:
var: my_variable
Et voilà, notre tutoriel approfondi sur la maîtrise d’Ansible est terminé. J’espère que ce guide vous a aidé à naviguer à travers les divers composants et subtilités d’Ansible, vous permettant de gérer et d’automatiser votre infrastructure avec aisance.