1. ホーム
  2. ansible

[解決済み] テンプレートモジュールを異なる変数セットで使用するには?

2022-11-15 02:32:30

質問

私のユースケースは次のようなものです。

私はテンプレートファイルを持っていて、そのテンプレートから2つの異なるファイルを作成したいのですが、それぞれのファイルに対して異なる変数のセットによって変数が埋められます。

例えば、私が行を含むファイルをテンプレート化したいとします。

mkdir -p {{myTemplateVariable}}

この変数に "File1" と "File2" が入るようにする適切な方法を見つけたいのですが、どうすればよいでしょうか?何かそのようなもの。

- name: template test 1
  template: 
        src=myTemplateFile
        dest=result1


- name: template test 2
  template: 
        src=myTemplateFile
        dest=result2

ここで、最初のテンプレートで使用する変数を a = "File1" と指定し、2番目のテンプレートで b = "File2" と指定することができます。

どのように解決するのですか?

Ansible 2.xの場合。

- name: template test
  template: 
    src: myTemplateFile
    dest: result1
  vars:
    myTemplateVariable: File1

- name: template test
  template: 
    src: myTemplateFile
    dest: result2
  vars:
    myTemplateVariable: File2


Ansible 1.xの場合。

残念ながら template モジュールはテンプレート内部で使用できる変数の受け渡しをサポートしていません。そこには 機能要求 がありましたが、拒否されました。

2つの回避策を思いつく。

1. インクルードする

以下の include 文は変数の受け渡しをサポートしています。ですから template タスクを追加ファイルの中に置き、適切なパラメータを付けて2回インクルードすることができます。

my_include.yml。

- name: template test
  template: 
        src=myTemplateFile
        dest=destination

main.ymlです。

- include: my_include.yml destination=result1 myTemplateVariable=File1

- include: my_include.yml destination=result2 myTemplateVariable=File2

2. myTemplateVariableを再定義する。

もう一つの方法は、単純に myTemplateVariable をすべての template タスクの直前に定義します。

- set_fact:
     myTemplateVariable: File1

- name: template test 1
  template: 
        src=myTemplateFile
        dest=result1

- set_fact:
     myTemplateVariable: File2

- name: template test 2
  template: 
        src=myTemplateFile
        dest=result2