Ansible Lineinfile Module With Regexp Examples
Le module ansible lineinfile est utilisé pour insérer de nouvelles lignes à la fin du fichier ou n’importe où dans le fichier. Avec le module ansible lineinfile, nous pouvons supprimer les lignes existantes du fichier et nous pouvons remplacer les lignes. Dans les exemples suivants, je vais vous montrer comment utiliser le module ansible lineinfile avec différents paramètres comme le regexpto pour insérer de nouvelles lignes.
Craete nouveau fichier et ajouter une ligne :
# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible lineinfile mdoule. lineinfile: path: /project/devops/abc.txt line: decodingdevops talks about all the devops tools state: present create: yes
Dans le module lineinfile, nous pouvons utiliser différents paramètres en fonction de notre besoin. Ici j’ai utilisé le paramètre ‘path’, le paramètre path indique au lineinfile à quel fichier il doit modifier Donc dans le paramètre path nous devons mentionner le chemin du fichier que nous allons modifier. Dans le paramètre line, nous devons ajouter la ligne qui va être ajoutée au fichier. Pour ajouter la ligne au fichier, nous devons mentionner le paramètre state comme présent. Créer le paramètre avec yes, nous avons utilisé pour créer le fichier si le fichier n’est pas existant.
que fait ce playbook
il va créer un nouveau fichier et il va ajouter la ligne au fichier. Si vous exécutez à nouveau le playbook, aucun changement ne se produira dans ce fichier puisque lineinfile ajoutera la ligne si la ligne n’est pas existante. Si la ligne est déjà existante alors il n’ajoutera pas cette ligne à nouveau.
si vous avez retiré le paramètre create et si vous exécutez le playbook. Vous devez avoir le fichier existé dans le chemin défini sinon il va par vous erreur comme
fatal : : FAILED ! => {« changed » : false, « msg » : « La destination /projet/devops/abc.txt n’existe pas ! », « rc » : 257}
Si le fichier est déjà existant :
si le fichier est déjà existant alors il sera ajouté à la fin du fichier.
Ansible Lineinfile avec Regexp Exemple :
---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt regexp: '^docker' line: 'hello devops' state: present backrefs: yes
Regexp est utilisé pour modifier la ligne particulière dans le fichier. Ici, nous avons mentionné dans le paramètre regexp comme ‘^devops’. Cela signifie que la ligne commencée avec docker doit être modifiée avec la ligne ‘hello devops’ dans le fichier. nous devrions mentionner backrefs comme yes. Backrefs yes remplacera la ligne par ‘hello devops’ seulement s’il trouve la ligne regexp (^docker) dans le fichier. S’il n’y a pas de ligne commencée par docker cela ne changera rien dans le fichier, le fichier sera laissé inchangé.
Par défaut la valeur de backrefs est non, donc si vous n’avez pas mentionné backrefs dans la tâche, elle supposera comme ‘backref : no’
Que se passera-t-il si vous n’avez pas mentionné backrefs : ou
si vous n’avez pas mentionné backrefs comme oui, et s’il n’y a pas de ligne commencée avec docker, quand même la ligne sera ajoutée à la fin du fichier. Si vous exécutez le playbook plusieurs fois, la ligne sera ajoutée taht nombre de fois. Pour éviter ce problème, vous devez mentionner backref comme yes.
Ajouter une ligne après/avant une ligne particulière :
Si vous voulez ajouter une ligne après/avant une ligne particulière, vous pouvez utiliser le paramètre insertafter/insertbefore dans le module ansible lineinfile.
# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt insertafter: '^docker' line: 'hello devops'
Ici, il ajoutera la ligne ‘hello devops’ après la ligne commencée avec docker.
Si vous voulez ajouter la ligne avant le début de la ligne, commencée avec docker, vous pouvez mettre insertbefore.
Supprimer une ligne en utilisant le regexp Ansible
# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt regexp: '^docker' state: absent
Ici, il supprimera la ligne commencée avec docker. Pour supprimer la ligne en utilisant regexp dans ansible, nous devons utiliser le paramètre state comme absent.
Dans tous les exemples ci-dessus, nous avons discuté de la ligne commencée par, puisque j’ai mentionné le symbole(^). Ce symbole représente la ‘ligne commençant par’, si vous voulez connaître plus de différentes options, vous devriez apprendre le regexp python.
https://docs.python.org/2/library/re.html
Leave a Reply