私は交換モジュールを使用してAnsibleのライン全体を交換しています。行には二重引用符と一重引用符が含まれています。エスケープ処理のために「\\」を追加してみましたが、うまくいかないようです。誰かが正しい構文を使用するのに役立ちますか?ファイルの実際の行は基本的に
<!-- <param name="core-db-dsn" value="pgsql://hostaddr=127.0.0.1 dbname=freeswitch user=freeswitch password='' options='-c client_min_messages=NOTICE'" /> -->
db部分のコメントを削除し、Postgres DB-info変数で置き換える必要があります。
- name: "Update switch.conf.xml with Postgres DB info"
replace:
path: /etc/freeswitch/autoload_configs/switch.conf.xml
regexp: '^<!-- <param name="core-db-dsn" value="pgsql: .*$'
line: "<param name="core-db-dsn" value="pgsql://hostaddr=127.0.0.1 dbname={{ DB-Info }} user={{ DB-Info
}} password='{{ DB-Pass }}' options='-c client_min_messages=NOTICE'" />"
ベストアンサー1
より多くのオプションがあります。複雑な式をエスケープしたくない場合は、ファイルに入れてください。たとえば、正規表現と行を(r *、l *)ファイルセットに入れます。
shell> cat files/replace/r1
^<!-- <param name="core-db-dsn" value="pgsql:(.*)$
shell> cat files/replace/l1
<param name="core-db-dsn" value="pgsql://hostaddr=127.0.0.1 dbname={{ DB_Info }} user={{ DB_Info }} password='{{ DB_Pass }}' options='-c client_min_messages=NOTICE'" />
これで次の作業が完了します。
- replace:
path: switch.conf.xml
regexp: "{{ lookup('file', 'files/replace/r1') }}"
replace: "{{ lookup('template', 'files/replace/l1') }}"
vars:
DB_Info: freeswitch2
DB_Pass: passwd
ファイルがさらに存在する場合、ジョブはループとして実行されます。例えば
- replace:
path: switch.conf.xml
regexp: "{{ lookup('file', 'files/replace/r' ~ ansible_loop.index ) }}"
replace: "{{ lookup('template', 'files/replace/l' ~ ansible_loop.index) }}"
loop: "{{ lookup('fileglob', 'files/replace/r*', wantlist=True) }}"
loop_control:
extended: true
vars:
DB_Info: freeswitch2
DB_Pass: passwd
「glob」が必要なものとのみ一致していることを確認してください。一時ファイルまたはバックアップファイルを削除してください。このループには、1から始まる連続インデックスを持つ(r *、l *)ファイルセットが必要です。
あまりにも多くの(r *、l *)ファイルを保持したくない場合は、すべての正規表現と行を単一のファイルに入れて、ファイル行を繰り返します。例えば
- replace:
path: switch.conf.xml
regexp: "{{ item.0 }}"
replace: "{{ item.1 }}"
with_together:
- "{{ lookup('file', 'files/replace/r-all').splitlines() }}"
- "{{ lookup('template', 'files/replace/l-all').splitlines() }}"
loop_control:
label: "{{ item.0 }}"
vars:
DB_Info: freeswitch2
DB_Pass: passwd