Ansible循环 - 如何将模板值与with_items匹配?

时间:2017-03-17 00:56:10

标签: ansible jinja2 ansible-template

我正在尝试创建值与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 %}
    }

这将创建单个文件,但每个文件都包含所有域和名称。

1 个答案:

答案 0 :(得分:6)

您已经定义了变量item并将其传递给模板,因此无需再次循环。

尝试:

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

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