2017-03-17 163 views
1

我正在嘗試創建值與其with_items值相匹配的文件。Ansible循環 - 如何使用with_items匹配模板值?

我有一個變種列表,像這樣:

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

哇,我得太多方法了。這工作,謝謝。我想我以爲它從某個地方定義的變量中獲得了模板項目,而不是從任務中傳入。 – gkrizek