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 rsaDistribution des clés SSH#
Copiez la clé publique SSH sur tous vos nœuds cibles.
ssh-copy-id username@target_hostRemplacez 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.3Inventaire 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 pingCela 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: presentExécutez le playbook avec la commande ansible-playbook.
ansible-playbook -i my_inventory.ini my_first_playbook.ymlPlaybook 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: startedRô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-serverCela 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-serverVariables de rôle#
Dans web-server/vars/main.yml, définissez quelques variables.
http_port: 80
https_port: 443Dans 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
- curlModè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: trueDé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 -vvvModule debug#
Utilisez le module debug pour afficher des variables.
---
- name: Exemple de débogage
hosts: all
tasks:
- debug:
var: my_variableEt 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.