web-dev-qa-db-ja.com

Ansible:単一の単語を置換して検索することは可能ですか

lineinfile モジュールでは、行全体が置き換えられます。

行が長い場合は、行全体をもう一度繰り返す必要があります。

ファイル内の単一のWordを置き換えたいとします。

#abc.conf
This is my horse

これは脚本です:

 - lineinfile: dest=abc.conf
               state=present
               regexp='horse'
               line='This is my dog'
               backup=yes

sed 's/horse/dog/g'のような何かを達成する方法はありますか?

18
user1994660

backreferences を使用して、行の他の部分(変更しないでください)を取得できます。

 - lineinfile: dest=abc.conf
               state=present
               regexp='^(.*)horse(.*)$'
               line='\1dog\2'
               backup=yes
               backrefs=yes
19
ghloogh

新しいモジュール replace1.6 バージョン:

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

1つのブロックでさらに置換操作を行う必要があり、ファイルがローカルにある場合は、テンプレートファイルの変数を置き換えてファイルをリモートにコピーするテンプレートの使用を検討することをお勧めします。

- template: src=/mytemplates/foo.j2 dest=/etc/file.conf

ローカルファイルでは、次のようなansible sintaxで変数を書くことができます

{{variable}}

スクリプトのスコープ内にある場合は置き換えられます。 ここ ドキュメント。

2
Gismo Ranas