Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Tags, limit et Ansible Vault

Après cette leçon: Je peux jouer une partie d’un playbook avec des tags et garder un secret hors du texte en clair.

Leçon de 60 min15 commandesLab de rôles Ansible : un rôle, des handlers et Vault dans une VM Ubuntu

Rejouer une ligne, jamais un mot de passe

Un tag Ansible est une étiquette posée sur une tâche, qui permet de jouer une partie seulement d’un playbook. Ansible Vault, lui, chiffre un secret pour qu’il ne soit jamais écrit en clair dans le projet.

Les deux servent chaque semaine. On ne rejoue pas tout un parc pour corriger une ligne, et on ne publie jamais un mot de passe dans un dépôt.

À la fin de cette leçon

Remarque

Je peux jouer une partie d’un playbook avec des tags et garder un secret hors du texte en clair.

Mots-clés

MotCe que ça veut direExemple
Tagune étiquette sur une tâche, pour la choisir au lancementtags: [cuisine]
--limitréduit un jeu à quelques hôtes seulement--limit table1
always et neverdeux tags spéciaux : toujours jouée, ou jamais sans demande
Chiffrerrendre un texte illisible sans le mot de passe
Ansible Vaultl’outil d’Ansible qui chiffre des fichiers ou des valeursansible-vault encrypt
Fichier de mot de passeun fichier qui contient le mot de passe du coffre--vault-password-file

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un tag choisit les tâches à jouer

Sans option, Ansible joue toutes les tâches. Avec --tags salle, il joue celles qui portent ce tag, plus celles de tag always. Avec --skip-tags, il en retire.

Une tâche de tag never ne part jamais d’elle-même. Elle part seulement si un de ses autres tags est demandé. L’option --list-tasks montre ce qui partirait, sans rien jouer.

Cinq tâches dans deux jeux

Code: bash
# service.yml : deux jeux, un hôte chacun
- hosts: four1
  gather_facts: false
  tasks:
    - name: Allumer le four
      ansible.builtin.debug: { msg: four allume }
      tags: [cuisine]
    - name: Compter les couverts
      ansible.builtin.debug: { msg: couverts comptes }
      tags: [salle, stock]
    - name: Ouvrir la caisse
      ansible.builtin.debug: { msg: caisse ouverte }
      tags: [caisse, never]
    - name: Noter la date
      ansible.builtin.debug: { msg: date notee }
      tags: always
- hosts: table1
  gather_facts: false
  tasks:
    - name: Dresser les tables
      ansible.builtin.debug: { msg: tables dressees }
      tags: [salle]

Créer le dossier du projet

Commande
mkdir -p ~/atelier-ansible

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Aller dans ce dossier

Commande
cd ~/atelier-ansible

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire service.yml

Commande
printf -- '- hosts: four1\n  gather_facts: false\n  tasks:\n    - name: Allumer le four\n      ansible.builtin.debug: { msg: four allume }\n      tags: [cuisine]\n    - name: Compter les couverts\n      ansible.builtin.debug: { msg: couverts comptes }\n      tags: [salle, stock]\n    - name: Ouvrir la caisse\n      ansible.builtin.debug: { msg: caisse ouverte }\n      tags: [caisse, never]\n    - name: Noter la date\n      ansible.builtin.debug: { msg: date notee }\n      tags: always\n- hosts: table1\n  gather_facts: false\n  tasks:\n    - name: Dresser les tables\n      ansible.builtin.debug: { msg: tables dressees }\n      tags: [salle]\n' > service.yml

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lister les tâches sans option

Commande
ansible-playbook -i four1,table1 -c local service.yml --list-tasks | grep "^      "

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lister les tâches du tag salle

Commande
ansible-playbook -i four1,table1 -c local service.yml --tags salle --list-tasks | grep "^      "

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lister les tâches du tag caisse

Commande
ansible-playbook -i four1,table1 -c local service.yml --tags caisse --list-tasks | grep "^      "

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple travaillé : quelles tâches partent

OptionTâches de la cuisinePourquoi
aucunefour, couverts, datecaisse a le tag never
--tags sallecouverts, datesalle, plus always
--tags caissecaisse, datecaisse est demandé, never ne bloque plus
--tags cuisine --skip-tags alwaysfouralways est retiré

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

--limit réduit un jeu à quelques hôtes

Un tag choisit des tâches. --limit choisit des hôtes. Il ne peut qu’en retirer au jeu : il n’ajoute jamais un hôte que le jeu ne vise pas.

Ici, le premier jeu vise four1 et le second table1. Avec --limit table1, le premier n’a plus aucun hôte et ne joue rien.

Lister les hôtes avec une limite

Commande
ansible-playbook -i four1,table1 -c local service.yml --limit table1 --list-hosts | grep -E "^ +(four1|table1)$"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Vault chiffre un secret par mot de passe

ansible-vault encrypt remplace un fichier par sa version chiffrée. Sa première ligne devient $ANSIBLE_VAULT;1.1;AES256, et le reste est illisible.

Pour jouer un playbook qui lit ce fichier, on donne le mot de passe avec --vault-password-file. Ici, le mot de passe est un faux, écrit par la leçon.

Écrire un faux mot de passe

Commande
echo mot-de-passe-d-atelier > mdp.txt

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire un secret de démonstration

Commande
printf 'cle_api: demo-cle-9042\n' > secret.yml

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Chiffrer le fichier

Commande
ansible-vault encrypt --vault-password-file mdp.txt secret.yml

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lire la première ligne du fichier

Commande
head -n 1 secret.yml

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Relire le secret avec le mot de passe

Commande
ansible-vault view --vault-password-file mdp.txt secret.yml

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire un jeu qui lit le secret

Commande
printf -- '- hosts: localhost\n  gather_facts: false\n  vars_files:\n    - secret.yml\n  tasks:\n    - name: Utiliser la cle\n      ansible.builtin.debug:\n        msg: "la cle a {{ cle_api | length }} caracteres"\n' > cle.yml

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Jouer avec le mot de passe

Commande
ansible-playbook -i localhost, -c local cle.yml --vault-password-file mdp.txt | grep msg

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Jouer sans le mot de passe

Commande
ansible-playbook -i localhost, -c local cle.yml 2>&1 | grep -m 1 -o "no vault secrets found"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Erreur fréquente

Attention

Beaucoup de gens rangent le mot de passe du coffre dans le même dépôt que le fichier chiffré. Le coffre est alors ouvert à quiconque lit le dépôt. Gardez le fichier de mot de passe hors du dépôt, et n’y mettez jamais une vraie valeur secrète en clair.

Pour aller plus loin

Ajoutez un tag cuisine à la tâche « Compter les couverts », puis lancez --tags cuisine --list-tasks. Quelles tâches partent maintenant ?

Retirez ensuite le tag always de « Noter la date ». Dites ce que --tags cuisine joue, et pourquoi une tâche de contrôle doit garder always.

À propos de ce labo et de sa source: Lab de rôles Ansible : un rôle, des handlers et Vault dans une VM Ubuntu

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.