Ansibleで完全な行を置き換える

Ansibleで完全な行を置き換える

私は交換モジュールを使用して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

おすすめ記事