Ansible: 不変の補間を含むテンプレートを埋める

Ansible: 不変の補間を含むテンプレートを埋める

テンプレート ファイルを取得し、いくつかの変数を補間して、結果のファイルを別のディレクトリに配置するプレイブックを作成する必要があります。

問題の最初の部分は、結果のファイルが別の Ansible プレイブックとして使用されるため、ソース ファイルには他の補間が含まれており、これらの補間はそのまま保持される必要があることです。例として、ソース ファイルに次のような内容が含まれていると仮定します。

key1: {{ value1 }}
key2: {{ value2 }}

の値は、key1私のプレイブックによって補間される必要があります (変数の値になりますvalue1) が、同時に、value2そのまま保持される必要があります ( になります) {{ value2 }}

問題の 2 つ目の部分は、このファイルが他のプロセスによって更新されているため、ソース ファイルを変更して中括弧の前にバックスラッシュを追加するだけでは不十分なことです。さらに、テンプレート ファイルは随時更新されるため、次の更新後にどの変数をスキップする必要があるかを予測できません。 を挿入する必要があることだけはわかっていますvalue1が、他の変数の名前がわかりません (今日は と がありますvalue2value3、明日は開発者がvalue2に名前を変更しvalue2_deprecatedてどこかに追加しますvalue3)。

Ansible に補間のみが必要であることを要求できますかvalue1?

ありがとう。

答え1

質問:テンプレートには補間が含まれており、これらの補間はそのまま保存される必要があります。

A: デフォルト変数を宣言する

    lbr: '{{ "{{" }}'
    rbr: '{{ "}}" }}'
    value1: '{{ lbr }} value1 {{ rbr }}'
    value2: '{{ lbr }} value2 {{ rbr }}'

テンプレートを作成する

shell> cat template.yml.j2
key1: {{ value1 }}
key2: {{ value2 }}

質問:値1のみを補間する必要があります。

A: デフォルト値を上書きします。例:

    - template:
        src: template.yml.j2
        dest: playbook.yml
      vars:
        value1: value1

与える

shell> cat playbook.yml 
key1: value1
key2: {{ value2 }}

関連情報