web-dev-qa-db-fra.com

Ansible: est-il possible de rechercher remplacer un seul mot

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'?

18
user1994660

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
19
ghloogh

Nouveau module remplacer disponible depuis 1.6 version:

- replace:
    dest=abc.conf
    regexp='horse'
    replace='dog'
    backup=yes
30
user2288008

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.

2
Gismo Ranas