Nginx 根据变量的值包括ansible模板的内容
我想通过ansible生成和部署nginx反向代理配置。Nginx 根据变量的值包括ansible模板的内容,nginx,ansible,ansible-template,Nginx,Ansible,Ansible Template,我想通过ansible生成和部署nginx反向代理配置。 在模板中,有一个用于拦截错误的部分(404、501等),它不应在所有部署中都处于活动状态。我希望能够在变量{{customError}的值的条件下切换在模板中包含这些行 这可能吗?我见过的大多数解决方案都使用不同的模板,并根据使用哪个模板的条件在任务中做出决定。我非常不喜欢多个模板的想法,因为这不会迫使我为所有可能的情况创建多个模板。当然,如果部署意味着不同的Ansible主机,那么您可以在主机级别的资源清册中分配变量customErro
在模板中,有一个用于拦截错误的部分(404、501等),它不应在所有部署中都处于活动状态。我希望能够在变量
{{customError}
的值的条件下切换在模板中包含这些行
这可能吗?我见过的大多数解决方案都使用不同的模板,并根据使用哪个模板的条件在任务中做出决定。我非常不喜欢多个模板的想法,因为这不会迫使我为所有可能的情况创建多个模板。当然,如果部署意味着不同的Ansible主机,那么您可以在主机级别的资源清册中分配变量
customError
以下是一个示例:
显示变量定义的清单customError
:
all:
hosts:
server1.nginx.tld:
customError: true
server2:.nginx.tld:
customError: false
剧本,包括:
该模板采用Jinja格式,基于主机变量default.j2使用:
执行它:
$ 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;
}
当然,如果部署对您来说意味着一个不同的Ansible主机,那么您可以在资源清册中在主机级别分配变量
customError
以下是一个示例:
显示变量定义的清单customError
:
all:
hosts:
server1.nginx.tld:
customError: true
server2:.nginx.tld:
customError: false
剧本,包括:
该模板采用Jinja格式,基于主机变量default.j2使用:
执行它:
$ 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 %}
您可以使用Jinja条件生成动态内容,如:
{% if group == 'dev' %}
404 = something
501 = something
{% else %}
404 = something different
501 = something different
{% endif %}
这可能吗?
=>当然可以!如果不是的话,我就看不到使用模板的意义了!。现在,你是如何做到这一点的?你面临的确切问题是什么?一个好的起点是,更具体地说,我到目前为止一直在用谷歌搜索,我确信这一定是可能的(参见答案,但不确定如何做到)这可能吗?
=>当然!如果不是的话,我就看不到使用模板的意义了!。现在,你是如何做到这一点的?你面临的确切问题是什么?一个好的开始是,更具体地说,我到目前为止一直在尝试谷歌搜索,我确信这一定是可能的(见答案,但不确定如何)