Ansible 在循环中创建模板,可以访问项目

Ansible create template in loop with access to item

我正在尝试为在数组中找到的每个项目动态创建一个新的 nginx 主机。但是,我需要知道循环的细节。

- name: 'adding sites to nginx'
  template:
    src: 'nginx/template.conf.j2'
    dest: '/etc/nginx/conf.d/{{ item }}.conf'
    owner: 'root'
    group: 'root'
    mode: 0644
  with_items:
    - '{{ sites }}'

除了模板无法访问循环数据外,这非常有效。 (站点)我需要知道站点,以便正确生成模板。

我能够通过使用 {{ item }} 而不是 {{ sites }} 获得访问权限。

- name: 'adding sites to nginx'
  template:
    src: 'nginx/template.conf.j2'
    dest: '/etc/nginx/conf.d/{{ item }}.conf'
    owner: 'root'
    group: 'root'
    mode: 0644
  with_items:
    - '{{ sites }}'

然后在template.conf.j2内,您可以通过定位{{ item }}

来访问当前循环
server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;

  server_name {{ item }}.{{ domain }};
  set $base {{ app_path }}/{{ item }};
  root $base/public;

  # SSL
  ssl_certificate /etc/letsencrypt/live/{{ domain }}/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/{{ domain }}/privkey.pem;
}