Ansible loop - как сопоставить значения шаблона с 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.


person gkrizek    schedule 17.03.2017    source источник
comment
Аналогично: stackoverflow.com/questions/31142369/   -  person Flux    schedule 12.02.2019


Ответы (1)


У вас уже есть переменная item, определенная и переданная в шаблон, поэтому повторять цикл не нужно.

Пытаться:

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

    location / {
      proxy_pass {{item.domain}};
    }
}
person techraf    schedule 17.03.2017
comment
Вау, я слишком много об этом подумал. Это работает, спасибо. Думаю, я думал, что он получил элементы шаблона из переменных, определенных где-то, а не переданных из задачи. - person gkrizek; 17.03.2017