【发布时间】:2021-03-10 13:42:11
【问题描述】:
我想根据变量列表中定义的目录是否存在有条件地在我的 Nginx 虚拟主机中包含一些配置(实际上它也基于下面的变量列表是否存在变量,但我正在尝试在这里保持简单)。
变量如下所示:
nginx:
sites:
- name: example.com
aliases: www.example.com
tls:
key: /etc/letsencrypt/live/example.com/privkey.pem
certificate: /etc/letsencrypt/live/example.com/fullchain.pem
- name: anotherexample.com
aliases: www.anotherexample.com
tls:
key: /etc/letsencrypt/live/anotherexample.com/privkey.pem
certificate: /etc/letsencrypt/live/anotherexample.com/fullchain.pem
假设目录/etc/letsencrypt/live/example.com/存在,目录/etc/letsencrypt/live/anotherexample.com不存在。
以上用于以下模板(with_items: nginx.sites):
- name: Nginx Site Templates
template:
src: nginx/nginx_site.conf.j2
dest: /etc/nginx/sites-available/{{ item.name }}.conf
with_items: "{{ nginx.sites }}"
notify: reload nginx
tags:
- conf
“nginx/nginx_site.conf.j2”是部分:
server {
...
{% if [MY CONDITION THAT I NEED HELP WITH] %}
listen 443 ssl;
ssl_certificate_key {{ item.tls.key }};
ssl_certificate {{ item.tls.certificate }};
{% endif %}
...
}
我收集有关nginx.sites[].tls 中引用的目录是否存在的事实,并注册了以下事实:
- name: Register Fact About Available TLS Certificates
stat:
path: "/etc/letsencrypt/live/{{ item.name }}"
register: tls_site_certificates
changed_when: false
with_items: "{{ nginx.sites }}"
- conf
- facts
对于每个站点,仅当引用的目录存在时,我才希望将这些行包含在模板的 if 条件中。我想我几乎在那里,但我很难弄清楚。到目前为止,我有:
{% if tls_site_certificates.results | select('item.name', 'equalto', item.name) | select('stat.exists') == true %}
【问题讨论】:
标签: ansible jinja2 ansible-facts