Dans le module lineinfile , il remplace la ligne complète.
Si la ligne est longue, je dois répéter toute la ligne à nouveau.
Supposons que je veuille remplacer le seul mot du fichier:
#abc.conf
This is my horse
voici le playbook:
- lineinfile: dest=abc.conf
state=present
regexp='horse'
line='This is my dog'
backup=yes
existe-t-il un moyen de réaliser quelque chose comme sed 's/horse/dog/g'
?
Vous pouvez utiliser backreferences pour récupérer d'autres parties (qui ne doivent pas être modifiées) de la ligne:
- lineinfile: dest=abc.conf
state=present
regexp='^(.*)horse(.*)$'
line='\1dog\2'
backup=yes
backrefs=yes
Nouveau module remplacer disponible depuis 1.6
version:
- replace:
dest=abc.conf
regexp='horse'
replace='dog'
backup=yes
Si vous avez besoin de faire plus d'opérations de remplacement dans un bloc et que vous avez le fichier localement, vous voudrez peut-être envisager d'utiliser un modèle, qui remplace les variables dans le fichier de modèle et copie le fichier sur la télécommande:
- template: src=/mytemplates/foo.j2 dest=/etc/file.conf
Dans le fichier local, vous pouvez écrire une variable avec sintax ansible comme
{{variable}}
et il sera remplacé s'il est dans la portée du script. Ici les documents.