2017-03-24 138 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值自动模板到正确的地址。