我正在为虚拟主机编写模板文件,文件中的DNS应根据环境主机名更改。我正在尝试解决问题:
server {
listen 80;
charset utf-8;
server_name "{{ 'a.com if ansible_hostname='p.com' 'b.com' if ansible_hostname= 'd.com' 'z.com' if ansible hostname is 'k.com' else 'default.com' }}";
rewrite ^(.*) https://$server_name$1 permanent;
}
我如何在模板中实现这一点,即:
{{ 'a.com' if ansible_hostname='p.com' 'b.com' if ansible_hostname= 'd.com' 'z.com' if ansible hostname is 'k.com' else 'default.com' }}" `
我是jinja 2的新手,不知道该如何做到这一点。 单个if else语句正在工作,但我如何使用多个if else语句来定义文件中变量的值。
答案 0 :(得分:2)
因此,经过一些研究工作,我能够解决问题。我们可以
{% if ansible_hostname == 'a.com' %}
{% set server = 'b.com' %}
{% elif ansible_hostname == 'c.com' %}
{% set server = 'd.com' %}
{% else %}
{% set server = 'define yourself' %}
{% endif %}
server {
listen 80;
charset utf-8;
server_name {{ server }};
rewrite ^(.*) https://$server_name$1 permanent;
}
如果有人可以展示使用jinja2过滤器来实现这一目标,那么我们将非常感激。
答案 1 :(得分:1)
我认为没有Jinja过滤器可以在这里使用,但你可以简单地使用dict:
server {
listen 80;
charset utf-8;
server_name {{ {"a.com": "b.com", "c.com": "d.com"}[ansible_hostname] | default("default.com") }};
rewrite ^(.*) https://$server_name$1 permanent;
}
这可能适用于2个或更多的主机,但随着数量的增加而变得越来越脏。一般来说,如果在模板文件中不会发生这样的决定,我认为会更干净。这也可以是host_vars或group_vars中的配置选项。要继续使用示例主机,您可以拥有包含内容
的文件host_vars/a.com
---
server: b.com
...
以及内容为
的文件host_vars/c.com
---
server: d.com
...
在文件group_vars/all
中,您可以定义默认值。
---
server: default.com
...