2017-01-09 2 views
2

Je souhaite insérer des lignes dans un fichier en utilisant le module blockinfile. La tâche est quelque chose comme ceci:Module blockinfile Ansible idempotent?

name: add some lines 
    become: true 
    blockinfile: 
     dest: /etc/sysctl.conf 
     block: | 
     mykey1={{ kernvars['my_value1'] }} 
     mykey2={{ kernvars['my_value2'] }} 
     mykey3={{ kernvars['my_value3'] }} 

Est-il possible pour le module (ou un motif pertinent) pour vérifier et insérer les lignes spécifiques que si elles ne sont pas déjà là?

En utilisant ansible 2.0.0.2 sur Ubuntu 16.04.01

Répondre

4

Oui. Le module blockinfile est idempotent par défaut.

En plus du contenu que vous spécifiez, il ajoute deux lignes: au début du bloc et à la fin du bloc. Lors des exécutions suivantes, il vérifie le contenu entre ces deux marqueurs et si le contenu n'a pas changé, il renvoie le statut «ok» et ne l'insère plus. Ces lignes doivent être insérées dans le fichier de configuration en tant que commentaires. Ainsi, selon le format de fichier de configuration exact utilisé, vous pouvez personnaliser le caractère utilisé pour marquer le commentaire avec l'argument (# par défaut). Si vous utilisez plusieurs tâches blockinfile sur le même fichier de destination, vous devez également ajouter une chaîne unique à chaque tâche (également dans l'argument) afin qu'Ansible puisse les différencier.

En savoir plus sur blockinfile dans la documentation Ansible.

+0

Parfois, c'est tellement triste que je ne peux voter qu'une seule fois pour une réponse. @techraf Merci beaucoup pour cette déclaration claire qui manque dans le doc. – Aleksandar