Ansible 循环 - 如何将模板值与 with_items 匹配?
Ansible loop - how to match up template values with with_items?
我正在尝试创建值与其 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
only.
我尝试了很多变体。我最接近的是这个:
server {
listen 80;
listen [::]:80;
{% for item in sites %}
server_name {{item.cname}}.es.nodesource.io;
location / {
proxy_pass {{item.domain}};
}
{% endfor %}
}
这将创建单独的文件,但每个文件都有所有域和 cname。
您已经定义了变量 item
并传递给模板,因此无需再次循环。
尝试:
server {
listen 80;
listen [::]:80;
server_name {{item.cname}}.es.nodesource.io;
location / {
proxy_pass {{item.domain}};
}
}
我正在尝试创建值与其 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
only.
我尝试了很多变体。我最接近的是这个:
server {
listen 80;
listen [::]:80;
{% for item in sites %}
server_name {{item.cname}}.es.nodesource.io;
location / {
proxy_pass {{item.domain}};
}
{% endfor %}
}
这将创建单独的文件,但每个文件都有所有域和 cname。
您已经定义了变量 item
并传递给模板,因此无需再次循环。
尝试:
server {
listen 80;
listen [::]:80;
server_name {{item.cname}}.es.nodesource.io;
location / {
proxy_pass {{item.domain}};
}
}