2017-03-24 103 views
0

假設我爲不同的AWS區域設置了一個Web服務器,例如us-east-1和eu-east-1。我這樣做在Ansible中,如何設置基於超變量的變量?

$ ansible-playbook -i inventory web-server.yml -e "region=us-east-1" 

我在多個地方使用變量「region」。

在我的角色

現在/ Web服務器/默認/ main.yml我有這個

--- 
us-east-1: US-WebServer.domain.com 
eu-east-1: EU-Webserver.domain.com 

在一個任務,我怎樣才能在默認/ main.yml文件,並將其設置爲另一個名爲「web_server?」的變量然後我在角色的不同部分使用web_server。我知道我可以做到這一點,但有沒有更好的辦法?

- name: Setup web server for US region 
    set_fact: web_server={{ us-eeast-1 }} 
    when: "'us-east-1' in {{ region }}" 
- name: Setup web server for EU region 
    set_fact: web_server={{ eu-eeast-1 }} 
    when: "'eu-east-1' in {{ region }}" 

回答

1

重構您瓦爾到:

--- 
web_servers: 
    us-east-1: US-WebServer.domain.com 
    eu-east-1: EU-Webserver.domain.com 
web_server: "{{ web_servers[region] }}" 

這樣web_server將根據region值自動模板到正確的地址。