1 févr. 2016

[ANSIBLE] lineinfile: n'ajouter une ligne qu'une seule fois

Dernièrement, il m'est arrivé lors de l’exécution d'un playbook une seconde fois d'incrémenter une seconde fois avec les mêmes valeurs le fichier /etc/hosts ...

Dans ma vision de Ansible, on devrait pouvoir executer plusieurs fois un playbook sans avoir de parasites, doublons etc.

J'ai trouver une solution en passant par "register" pour éviter ce genre de problème.

  • Je vérifie si il y a la chaine de caractère en amont, avec shell j'utilise la command linux "grep" pour voir si la chaine de caractère est présente
  • Ensuite j'utilise register pour stocker le resultat tout en ignorant les erreurs avec ignore_errors: true (sans ça le script ansible s'arrête à cause d'une erreur fatale)
  • Puis je modifie /etc/hosts en utilisant lineinfile avec when qui permet de vérifier si le résultat stocké précédement dans register est vide ou non (fait un failed ou non).
  • Si le register hosts_grep est vide; la commande lineinfile s'execute.
  • j'espère être clair ! ;-)
Ci après un example :
roles/config/tasks/main.yml

# Vérification de /etc/hosts
- name: Test for line
  shell: grep openldap /etc/hosts
  ignore_errors: true
  register: hosts_grep
# Modification de /etc/hosts
- name: Modification /etc/hosts
  sudo: true
  lineinfile:
    dest=/etc/hosts
    regexp=''
    insertafter=EOF
    line="10.250.0.108 openldap01\n10.250.0.109 openldap02"
    state=present
  when: hosts_grep|failed
Bien faire attention à l'indentation !

Aucun commentaire:

Enregistrer un commentaire

Différences majeures entre Red Hat 6, 7, 8 et 9

Quelles sont les différences majeures entre RHEL 6, 7, 8 et 9 ? Système de fichiers RHEL 6: Par défaut : ext4. Autres : ext2, ext3 supportés...