2015-05-12 37 views
2

我是一個寫文件應按照環境改變內部虛擬主機和DNS模板文件主機name.Below是問題,我試圖解決:如何使用嵌套,如果裏面的Jinja2過濾

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' }}" ` 

我是新來神社2,而且不知道如何做到這一點。 單if else語句正在工作,但我如何使用多個if else語句來定義文件中變量的值。

回答

2

所以經過一些研究工作,我能嚴厲打擊issue.We可以

{% 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

我覺得沒有神社過濾器將被使用的,但在這裏,你可以簡單地用一個字典做:

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 

...