Chris F
Chris F

Reputation: 16763

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

Say I'm setting up a web server for different AWS regions, e.g., us-east-1 and eu-east-1. I do this

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

I use the variable "region" in multiple places.

Now in my roles/web-server/defaults/main.yml I have this

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

In a task, how can I get in the defaults/main.yml file and set it to yet another variable named "web_server?" I then use web_server in different parts of the role. I know I can do this, but is there a better way?

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

Upvotes: 0

Views: 845

Answers (1)

Konstantin Suvorov
Konstantin Suvorov

Reputation: 68289

Refactor your vars into:

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

This way web_server will automatically template into correct address based on region value.

Upvotes: 1

Related Questions