2017-03-17 82 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