
ansible.builtin.getent: interroge les bases NSS (Name Service Switch) du managed node, passwd, group, hosts, services, networks, protocols. C'est l'alternative idempotente au pipeline command: getent passwd alice quand vous voulez vérifier l'existence d'une entrée ou récupérer ses détails sans passer par le shell.
Le résultat est rangé dans ansible_facts.getent_<database>, directement réutilisable dans une condition when: ou un template Jinja, sans parsing manuel de stdout.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Interroger
passwd,group,hostsdepuis un playbook. - Conditionner une tâche selon la présence d'une entrée (
when:). - Résoudre un hostname via NSS (DNS +
/etc/hosts+ nsswitch). - Récupérer des facts utilisateurs ou groupes pour audit.
Prérequis
Section intitulée « Prérequis »become: falsesuffit en lecture (sauf bases protégées).- Le module n'écrit jamais, pure lecture, pas de
state:.
Lister tous les utilisateurs du système
Section intitulée « Lister tous les utilisateurs du système »- name: Lire la base passwd ansible.builtin.getent: database: passwd
- name: Afficher les users systeme (UID < 1000) ansible.builtin.debug: msg: "{{ item.key }}" loop: "{{ ansible_facts.getent_passwd | dict2items }}" when: (item.value[1] | int) < 1000ansible_facts.getent_passwd est un dict indexé par username. Chaque valeur est une liste [password, uid, gid, gecos, home, shell], exactement comme les colonnes de /etc/passwd.
Vérifier qu'un groupe existe
Section intitulée « Vérifier qu'un groupe existe »- name: Verifier la presence du groupe wheel ansible.builtin.getent: database: group key: wheel
- name: Echouer si wheel n'existe pas ansible.builtin.fail: msg: "Groupe wheel manquant : corriger le provisioning" when: ansible_facts.getent_group.wheel is not definedkey: restreint la requête à une seule entrée, plus rapide qu'un dict | dict2items. Si l'entrée est absente, ansible_facts.getent_<db> reste vide ou non défini selon les versions, d'où le is not defined.
Résoudre un hostname
Section intitulée « Résoudre un hostname »- name: Resoudre db1.lab via NSS ansible.builtin.getent: database: hosts key: db1.lab
- name: Recuperer l'IP ansible.builtin.set_fact: db1_ip: "{{ ansible_facts.getent_hosts['db1.lab'][0] }}"Avantage sur dig ou nslookup : getent hosts respecte /etc/nsswitch.conf, il consulte /etc/hosts, DNS, mDNS, dans l'ordre configuré sur la cible. C'est ce que voient réellement les applications.
Conditionner une tâche selon la présence d'un user
Section intitulée « Conditionner une tâche selon la présence d'un user »Pattern fréquent : configurer alice uniquement si elle existe (sinon laisser un autre playbook la créer en amont).
- name: Verifier que alice existe ansible.builtin.getent: database: passwd key: alice failed_when: false
- name: Configurer le shell de alice ansible.builtin.user: name: alice shell: /bin/zsh when: ansible_facts.getent_passwd.alice is definedfailed_when: false évite l'échec si la clé n'existe pas, sans ça, getent retourne un code non-zéro et le play s'arrête.
Pièges courants
Section intitulée « Pièges courants »Trois de ces quatre pannes ne viennent pas du module mais de ce qu'il observe : une entrée absente à laquelle on accède sans précaution, un nom que le système ne sait pas résoudre, un annuaire distant dont le service est arrêté. La quatrième est une question de volume, et elle se règle en ciblant une entrée au lieu de rapatrier toute la base.
| Symptôme | Cause | Fix |
|---|---|---|
KeyError sur ansible_facts.getent_passwd.alice | User absent, accès direct sans test | Utiliser is defined ou default({}) |
| Hostname non résolu | DNS down, /etc/hosts incomplet | Vérifier nsswitch.conf et tester getent hosts <host> à la main |
Groupe absent dans getent_group | LDAP/SSSD pas démarré | Vérifier que le service NSS distant est actif sur la cible |
| Lecture lente sur gros annuaire | database: passwd complet via LDAP | Restreindre avec key: pour cibler une entrée |
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
À retenir
Section intitulée « À retenir »database:= base NSS à interroger (passwd,group,hosts,services...).key:= entrée spécifique (sinon dump complet).- Résultat dans
ansible_facts.getent_<database>, un dict indexé par clé. - Lecture pure, pas d'écriture, idempotent par nature.
- Préférable à
command: getentcar le résultat est structuré et réutilisable danswhen:.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Module stat : l'autre module de lecture pure, côté fichiers cette fois, pour conditionner une tâche.
- Modules assert et fail : transformer une lecture NSS en précondition qui arrête le play avec un message utile.
- Module service_facts : la même logique de collecte d'état, appliquée cette fois aux services.