在 Ansible 中,如何根据 extra-vars 设置变量?

In Ansible, how do I set a variable based on extra-vars?

假设我正在为不同的 AWS 区域设置 Web 服务器,例如 us-east-1 和 eu-east-1。我这样做

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

我在多个地方使用变量 "region"。

现在在我的 roles/web-server/defaults/main.yml 中我有这个

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

在任务中,如何进入 defaults/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 }}"

将您的变量重构为:

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

这样 web_server 将根据 region 值自动模板化为正确的地址。