Ansible
Écrire des rôles Ansible de durcissement réellement idempotents

Un rôle de durcissement est rejoué des dizaines de fois par an. S'il n'est pas idempotent, il produit du bruit dans les rapports et, à terme, plus personne ne lit ses résultats.
Trois causes de non-idempotence
- L'usage de command ou shell sans clause changed_when
- La modification ligne à ligne d'un fichier au lieu d'un gabarit complet
- Des handlers déclenchés à chaque exécution par un fichier régénéré avec un horodatage
Le motif recommandé
- name: Déployer la configuration sysctl durcie
ansible.builtin.template:
src: hardening.conf.j2
dest: /etc/sysctl.d/60-hardening.conf
owner: root
group: root
mode: "0644"
notify: Recharger sysctl
- name: Vérifier une valeur appliquée
ansible.builtin.command: sysctl -n net.ipv4.conf.all.rp_filter
register: rp_filter
changed_when: false
check_mode: false
Tester le rejouement
molecule test -s default
# ou, sur une machine de recette :
ansible-playbook hardening.yml --diff
ansible-playbook hardening.yml --diff | grep -c 'changed=1'
Un second passage doit rapporter zéro changement. C'est le seul critère d'acceptation qui vaille.
Une imprécision ou une erreur dans cet article ? Signalez-la nous, nous corrigeons et datons la mise à jour.


