2017-03-17 10 views
1

with_itemsの値に一致する値を持つファイルを作成しようとしています。可能なループ - テンプレート値をwith_itemsとどのように一致させるか?

私はそうのようなVARのリストを持っている:

sites: 
    - domain: google.com 
    cname: blue 
    - domain: facebook.com 
    cname: green 
    - domain: twitter.com 
    cname: red 

私はこのタスクのリスト内のオブジェクトのそれぞれについて、個々のファイルを作成します。

- name: Create files 
    template: 
    src: file.conf 
    dest: "/etc/nginx/conf.d/{{item.cname}}.conf" 
    with_items: "{{sites}}" 

これらの両方が素晴らしい仕事。私のテンプレートファイルには、blue.confというファイルが作成され、google.comというファイルが作成されます。のみです。

私は多くのバリエーションを試しました。個々のファイルを作成することを

server { 
     listen 80; 
     listen [::]:80; 
     {% for item in sites %} 
     server_name {{item.cname}}.es.nodesource.io; 

     location/{ 
      proxy_pass {{item.domain}}; 
     } 
     {% endfor %} 
    } 

が、すべてのファイルには、すべてのドメインとCNAMESを持っている:私が得た最も近いがこれでした。

答えて

3

すでに変数itemが定義され、テンプレートに渡されているため、再度ループする必要はありません。

試してみてください。

server { 
    listen 80; 
    listen [::]:80; 
    server_name {{item.cname}}.es.nodesource.io; 

    location/{ 
     proxy_pass {{item.domain}}; 
    } 
} 
+0

うわー、私は道にそれをoverthinkingました。これはうまくいく、ありがとう。私は、タスクから渡されない、どこかで定義された変数からテンプレート項目が得られたと思っていたと思います。 – gkrizek

関連する問題