根据变量的值包含 ansible 模板的内容



我想通过ansible生成和部署nginx反向代理配置。
在模板中,有一个用于拦截错误(404、501 等(的部分,这不应该对所有部署都处于活动状态。我希望能够在变量{{customError}}值的条件下切换这些行在模板中的包含。

这可能吗?我见过的大多数解决方案都是使用不同的模板,并根据条件决定使用哪个模板。我非常不喜欢多个模板的想法,因为这不会强迫我为所有可能性创建许多模板的方式。

可以肯定的是,如果对您来说,部署意味着不同的 Ansible 主机,那么您可以在清单中的主机级别分配变量customError

下面是一个示例:

清单,显示变量customError的定义:

all:
hosts:
server1.nginx.tld:
customError: true
server2:.nginx.tld:
customError: false

包含模板文件基本部署的剧本:

---
- hosts: all
tasks: 
- name: Copy default Nginx config
template:
src: default.j2
dest: /etc/nginx/sites-enabled/default

该模板采用 Jinja 格式,使用基本条件,基于 host 变量default.j2

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

{% if customError %}
error_page 404 /custom_404.html;
location = /custom_404.html {
root /usr/share/nginx/html;
internal;
}
{% endif %}
}

执行它:

$ ansible-playbook playbook.yml --inventory=inventory.yaml
PLAY [all] *********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [server2.nginx.tld]
ok: [server1.nginx.tld]
TASK [Copy default Nginx config] ***********************************************
changed: [server1.nginx.tld]
changed: [server2.nginx.tld]
PLAY RECAP *********************************************************************
server1.nginx.tld          : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
server2.nginx.tld          : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

为了验证这产生了什么,更临时的 Ansible:

$ ansible -a 'cat /etc/nginx/sites-enabled/default' all --inventory=inventory.yaml
server1.nginx.tld | CHANGED | rc=0 >>
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

error_page 404 /custom_404.html;
location = /custom_404.html {
root /usr/share/nginx/html;
internal;
}
}
server2.nginx.tld | CHANGED | rc=0 >>
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

}

您可以使用生成动态内容的 Jinja 条件,例如:

{% if group == 'dev' %}
404 = something
501 = something
{% else %}
404 = something different
501 = something different
{% endif %}

https://jinja.palletsprojects.com/en/2.10.x/

相关内容

  • 没有找到相关文章

最新更新