Table des matières

C'est quoi Ansible ?

L’automatisation des tâches fonctionne grâce à Ansible. Bien qu’une connaissance approfondie d’Ansible ne soit pas nécessaire pour exécuter les tâches, il est nécessaire d’en avoir une pour écrire des évolutions. Et c’est mieux de comprendre ce qu’il se passe derrière les commandes 😉.

Ansible est un outil d’automatisation qui s’exécute traditionnellement depuis la machine locale, appelée orchestrateur, et qui exécute des commandes sur des hôtes distants, à travers SSH. Il opère sur des machines déjà crées, à la différences d’outils comme Puppet ou Chef qui ont pour objectif de provisionner des machines.

Intérêts

Correctement utilisé, Ansible permet de :

Notre utilisation d’Ansible est limitée et concerne essentiellement le premier point.

Exemples

Il faut voir les tâches exécutées par Ansible comme des « scripts shell améliorés ». Les tâches sont décrites en YAML et sont généralement agnostiques du système d’exploitation sous-jacent. Par exemple, la tâche…

snippet.yaml
- name: Ensure postgres user exists
  user: 
    name: postgres
    state: present

…s’assure que l’utilisateur postgres existe sur le système distant. De plus, les tâches Ansible sont idempotentes, c’est-à-dire qu’elles peuvent être lancées plusieurs fois et donneront le même résultat. Dans cet exemple, si l’utilisateur existe déjà, Ansible le détectera et ne tentera pas d’en créer un nouveau.

Attention:

Ansible laisse énormément de libertés, ainsi il est possible d’écrire des tâches dangereuses, non-idempotentes, lourdes, etc. C’est à chacun·e de prendre le temps de réfléchir à la meilleure solution, voire de décider de ne pas automatiser.

Ansible utilise un inventaire qui liste les différents hôtes de l’infrastructure et le moyen d’y accéder. Les playbooks permettent d’appliquer des tâches sur des hôtes particuliers, dans un ordre donné. Les tâches sont souvent regroupées au sein de rôles afin de former un ensemble cohérent et ré-utilisable (exemple : un rôle nginx permettant d’installer et de configurer un serveur web).

Ansible utilise le moteur de template Jinja2. Il est très utile pour rendre un fichier de configuration générique. Par exemple, l’extrait fictif suivant…

snippet.jinja2
http {
  server {
    server_name {{ domain_name }};
  }
}

…produira un fichier de configuration pour serveur web, en ayant remplacé {{ domain_name }} par la valeur de la variable domain_name. Cette variable peut être, par exemple, attachée à un hôte précis ou calculée à la volée. Le même fichier, et par extension la même tâche, sera utilisable pour des hôtes différents.

Vocabulaire

Dans la suite de la documentation, on utilise les mots suivants :