Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

Gestion des faits

Présentation des faits de Ansible

Les variables de Ansible ont été évoquées dans le chapitre précédent, mais en réalité ce sont les faits de Ansible. Nous allons approfondir ce sujet.

Par défaut, un playbook exécute le module setup pour collecter les faits des hôtes gérés. Il s’agit de la tâche Gathering Facts. Dans les versions inférieures à Ansible 2.3, elle s’appelait tout simplement setup. Après son exécution, toutes les tâches que nous avons créées sont exécutées à leur tour.

Les faits sont donc des variables collectées sur les hôtes gérés et qui peuvent être utilisées dans les playbooks. Elles contiennent des informations de ceux-ci telles que le nom d’hôte, les adresses IP, la version du système d’exploitation, la version du noyau Linux, les disques, etc.

Le module setup est aussi supporté pour les hôtes gérés avec le système d’exploitation Microsoft Windows.

1. Collecte des faits

Par défaut, le module setup est exécuté automatiquement. Vous n’avez donc pas besoin de l’activer. Néanmoins, il sera vu plus loin dans ce chapitre comment le désactiver.

Vous pouvez utiliser la commande ansible pour collecter les faits :

ansible <hôtes gérés> -m setup [-a <arguments>] 

Le paramètre <hôtes gérés> peut être :

  • un groupe d’hôtes défini dans le fichier inventaire ;

  • les groupes prédéfinis all et ungrouped ;

  • le nom d’un hôte déclaré dans le fichier d’inventaire.

Le commutateur -m définit le module à traiter.

Le commutateur -a permet de spécifier...

Faits personnalisés

Nous avons vu que les faits Ansible sont un moyen d’obtenir des informations sur les hôtes gérés pour les utiliser dans des variables de playbooks. Les faits personnalisés, eux, vont vous permettre de contrôler certains aspects de la gestion de vos systèmes distants.

1. Stockage des faits

Les faits personnalisés que vous créez sont localement stockés dans le répertoire /etc/ansible/facts.d sur chaque hôte géré. Ils intègrent donc la liste des faits standards collectés par le module setup. Ces fichiers doivent avoir l’extension .fact et être au format JSON ou INI, voire être des fichiers exécutables qui génèrent une sortie JSON. Ils ne peuvent pas être au format YAML.

Toutefois, un autre répertoire peut être spécifié dans le fichier de configuration de Ansible en utilisant le mot-clé fact_path.

Fichier de faits personnalisés statiques

Le fichier /etc/ansible/facts.d/preferences.fact est au format INI :

[specification] 
serial_num=G231Y92 

Le même fait pourrait être écrit au format JSON :

{ 
  "specification": { 
    "serial_num": "G231Y92" 
  }, 
} 

Les faits personnalisés sont stockés par le module setup dans la variable ansible_facts.ansible_local. Les faits sont organisés en fonction du nom du fichier qui les définit :

[root@server1 projet]# ansible server2 -m setup \ 
> -a "filter=ansible_local" 
server2 | SUCCESS => { 
   "ansible_facts": { 
       "ansible_local": { 
           "preferences": { 
               "specification": { 
                   "serial_num": "G231Y92" 
               } 
           } 
       }, 
       "discovered_interpreter_python": "/usr/libexec/platform-python" 
   }, 
   "changed":...

Module set_fact

Vous pouvez créer une nouvelle variable au sein du playbook en utilisant le module set_fact de Ansible. Ce qui permet parfois de se référer plus facilement.

Déclarer une nouvelle variable avec set_fact

Reprenez le fichier playbook3.yml de l’exemple précédent.

Déclarez la variable ns (n comme numéro et s comme série).

Effectuez la valeur de {{ ansible_local.get_serial_num.serial_num }}.

Invoquez la variable ns dans le module debug.

--- 
- name: Comment utiliser les faits locaux 
  hosts: all 
  gather_facts: true 
 
  tasks: 
    - name: set a new variable 
      set_fact: 
        ns: "{{ ansible_local.get_serial_num.serial_num }}" 
 
    - name: Afficher les faits locaux 
      debug: 
        msg: "Le numéro de série est {{ ns }}" 

Exécutez le playbook :

[root@server1 projet]# ansible-playbook playbook4.yml 
 
PLAY [Comment utiliser les faits locaux] ************************ 
 
TASK [Gathering Facts] ****************************************** 
ok: [server2] 
 
TASK [set a new variable] *************************************** 
ok: [server2] 
 
TASK [Afficher...

Variables magiques

Les variables magiques ne sont pas des faits. Elles ne peuvent pas être définies par l’utilisateur, mais elles le sont automatiquement par Ansible. Elles s’avèrent utiles pour obtenir des informations spécifiques d’un hôte géré.

Les variables magiques les plus couramment utilisées sont :

  • hostvars

  • groups

  • group_names

  • inventory_hostname

1. Variable magique hostvars

La variable hostvars permet d’accéder aux variables d’un hôte géré, y compris les faits qui ont été collectés sur celui-ci.

Exemple

En exécutant la commande ansible avec le module debug et le passage d’argument « var=hostvars["server2"] », un certain nombre de variables peuvent être obtenues :

[root@server1 projet]# ansible server2 -m debug \ 
> -a 'var=hostvars["server2"]' 
server2 | SUCCESS => { 
   "hostvars[\"server2\"]": { 
       "ansible_check_mode": false, 
       "ansible_diff_mode": false, 
     ...