Passer au contenu principal

Fondamentaux (Ansible)

L'inventaire

L'inventaire est la source de vérité des machines que gère Ansible. Sa conception conditionne la flexibilité et la maintenabilité du projet sur le long terme. Un inventaire mal structuré se paie en variables dispersées et en playbooks conditionnels illisibles.

Formats : INI vs YAML

Le format INI est simple pour les petits inventaires :

[web]
web01.example.com
web02.example.com

[db]
db01.example.com ansible_port=2222 ansible_user=dbadmin

[prod:children]
web
db

Le format YAML est plus verbeux mais plus lisible sur les inventaires complexes :

all:
  children:
    prod:
      children:
        web:
          hosts:
            web01.example.com:
            web02.example.com:
        db:
          hosts:
            db01.example.com:
              ansible_port: 2222
              ansible_user: dbadmin

Variables d'inventaire : inline vs fichiers

Les variables peuvent être définies directement dans l'inventaire (déconseillé pour tout ce qui dépasse quelques variables) ou dans des fichiers dédiés :

inventory/
├── hosts.ini
├── group_vars/
│   ├── all.yml         # variables pour tous les hôtes
│   ├── web.yml         # variables pour le groupe web
│   └── prod/
│       ├── vars.yml    # variables prod
│       └── vault.yml   # secrets chiffrés (Ansible Vault)
└── host_vars/
    └── web01.example.com.yml   # variables spécifiques à un hôte

Exemple de group_vars/web.yml :

nginx_worker_processes: 4
nginx_keepalive_timeout: 65
app_domain: example.com

Variables de connexion courantes

  • ansible_host : IP ou hostname réel (si différent du nom dans l'inventaire)
  • ansible_port : port SSH (défaut : 22)
  • ansible_user : utilisateur SSH
  • ansible_ssh_private_key_file : clé SSH spécifique
  • ansible_become_user : utilisateur cible pour l'élévation (défaut : root)
  • ansible_python_interpreter : chemin Python sur la cible (utile si non standard)

Inventaire dynamique

Un inventaire statique devient ingérable dès que l'infrastructure est élastique (cloud, VMs créées à la demande). L'inventaire dynamique est un script ou un plugin qui génère la liste des hôtes à la volée, en interrogeant une source externe.

Deux mécanismes :

  • Script exécutable : retourne du JSON sur stdout quand appelé avec --list
  • Plugin d'inventaire : classe Python intégrée à Ansible, configurée via un fichier YAML

Exemple avec AWS EC2 (collection amazon.aws) :

# inventory/aws_ec2.yml
plugin: amazon.aws.aws_ec2
regions:
  - eu-west-1
filters:
  tag:Environment: prod
keyed_groups:
  - key: tags.Role
    prefix: role
ansible-inventory -i inventory/aws_ec2.yml --list

Les plugins pour Netbox, VMware, Azure, GCP, ou une API maison sont couverts dans la section Expertise.

Inspecter l'inventaire

# Lister tous les hôtes
ansible-inventory --list

# Format lisible
ansible-inventory --graph

# Variables d'un hôte spécifique
ansible-inventory --host web01.example.com