Conçu pour simplifier les tâches de déploiement, de configuration et de gestion des infrastructures informatiques, Ansible est l’un des outils les plus populaires auprès des DevOps. Grâce à toutes ces fonctionnalités, il automatise une multitude d’actions répétitives. Parmi ces fonctionnalités, on retrouve Ansible Register. Découvrez cette commande et son utilisation.
C’est quoi Ansible Register ?
Ansible Register peut être qualifié de créateur de variables. Il capture l’output d'une tâche (ou sortie d’exécution) et la stocke dans une variable. Ainsi sauvegardée, la variable pourra être utilisée ultérieurement dans le playbook. Et ce, aussi bien avec des prints, des boucles, des conditionnelles, etc.
Comme chaque valeur est valide tout au long de l'exécution du playbook, les tâches suivantes peuvent accéder aux informations générées par la tâche précédente.
C’est d’autant plus important que sur Ansible, toutes les sorties d’exécution de tâches ne sont pas nécessairement enregistrées sur le Terminal. Pour accéder à ces outputs, vous devez impérativement les stocker dans la variable Ansible Registre.
Ces variables sont particulièrement utiles, puisqu’elles ajoutent de la flexibilité et de la réutilisabilité aux playbooks Ansible. Vous pouvez définir des valeurs dynamiques pouvant être adaptées à différents environnements ou configurations.
Comment utiliser le Ansible Register ?
Avant d’aller plus loin dans l’utilisation de la fonctionnalité Ansible Register, il convient de rappeler quelques bases :
- Le module Debug est utilisé en complément de Register puisqu’il permet d’imprimer la sortie sur le terminal.
- Les attributs de registre peuvent se combiner avec l'instruction conditionnelle (when), notamment pour créer des tâches basées sur la décision.
Enregistrer l’output
Sur Ansible, Register vous permet de créer des variables à partir de la sortie d'une tâche.
Dans un premier temps, il faudra définir le playbook en configurant ses différents paramètres. Par exemple :
- name : Test playbook - ansible register
hosts : ubuntu.anslab.com
gather_facts : False
become : True
Une fois que le playbook est défini, vous pourrez exécuter les différentes tâches. Cela peut prendre cette forme :
tasks:
- name: First Task - Using shell module to check if virtualenv is present or not
ansible.builtin.shell:
cmd: which virtualenv
register: virtualenv_output
ignore_errors: True
- name: Second Task - Print the full output
ansible.builtin.debug:
var: virtualenv_output
Ici, nous attirons votre attention sur certaines commandes :
- "which virtualenv" : cela permet d’exécuter la tâche
- virtualenv_output" : c’est dans cette variable que la sortie de tâche est capturée. Il est possible de la renommer.
- ansible.builtin.debug : c’est le module de débogage d’Ansible qui permet d’imprimer la valeur de registre.
Bon à savoir : pour faire fonctionner Ansible Registre, il est possible d’utiliser le module ap ou le module shell.
Avant de soumettre le playbook, il est primordial de vérifier qu'il n'y ait pas d'erreur de syntaxe. Vous pouvez alors taper la commande suivante :
ansible-playbook --syntax-check
Accéder aux attributs individuels
Cette étape vous permet d’imprimer uniquement le code de retour, et non pas l'intégralité de la sortie de la variable register sur Ansible.
Vous pouvez le faire, soit via la dot notation :
- name: Just checking the exit code
ansible.builtin.debug:
msg: "{{ virtualenv_output.rc }}"
Soit via le dictionnaire Python :
- name: Just checking the exit code - Python dict way
ansible.builtin.debug:
msg: "{{ virtualenv_output['rc'] }}"
Contrôler l’exécution du Playbook
Pour s’assurer de la bonne exécution du Playbook, il est primordial de contrôler
C’est possible grâce à l'instruction conditionnelle (when).
Voici comment l’utiliser :
- name: Install the package based on the return code
ansible.builtin.apt:
pkg: python3-virtualenv
state: present
when: virtualenv_output.rc != 0
register: virtualenv_install_output
Si le code de retour est 1, la tâche est considérée comme ayant échoué.
Écrire la sortie du registre dans un fichier
Bien souvent, c’est le module de débogage qui est utilisé pour imprimer la sortie sur stdout(Terminal). Mais vous pouvez aussi écrire la sortie dans un fichier virtualenv_output à l’aide d’autres modules. Par exemple, le module copy :
- name: Reroute the output to a file
ansible.builtin.copy:
content: "{{virtualenv_install_output}}"
dest: "/home/vagrant/virtualenv_output"
Itérer et enregistrer
Dernière étape dans l’utilisation d’Ansible Register ; l’itération grâce à la boucle. Le résultat de chaque itération sera ajouté à la variable de registre removed_output.
Voici les commandes :
- name: Using loops
ansible.builtin.shell:
cmd: rm -f "{{item}}"
register: removed_output
loop:
- test_file.txt
- abc.txt
- name: Print the removed output
ansible.builtin.debug:
msg:
- Return code for {{removed_output.results.0.item}} is {{removed_output.results.0.rc}}
- Return code for {{removed_output.results.1.item}} is {{removed_output.results.1.rc}}
Formez-vous pour utiliser Ansible Register
Si Ansible Register est particulièrement utile pour réutiliser certaines informations issues de tâches précédentes, c’est loin d’être la seule commande d’Ansible. Il en existe d’autres. Pour les maîtriser et déployer efficacement vos solutions digitales, vous devez d’abord bien connaître Ansible et ses fonctionnalités. C’est justement l’objectif de la DevUniversity. À travers un programme complet, vous apprendrez à utiliser tous les outils nécessaires au développement logiciel. Rejoignez-nous !