Ansible: check if variable equals string
102,665
Be careful with a variable called environment
, it can cause problems because Ansible uses it internally. I can't remember if it's in the docs, but here's a mailing list thread:
https://groups.google.com/forum/#!topic/ansible-project/fP0hX2Za4I0
We use a variable called stage
.
It looks like you'll end up with a bunch of these in a row:
- include_vars: testing_vars.yml
when: stage == "testing"
- include_vars: staging_vars.yml
when: stage == "staging"
- include_vars: production_vars.yml
when: stage == "production"
But you could also just include your environment:
- include_vars: "{{ stage }}_vars.yml"
Or, use the vars_files
on a playbook level:
vars_files:
- vars/{{ stage }}_vars.yml
Author by
Jordan Ell
Updated on September 03, 2020Comments
-
Jordan Ell over 3 years
I have an ansible variable passed in on the command line as such:
ansible-playbook -e environment=staging ansible/make_server.yml
I want to load in some variables in my role dependeing on the value of environment. I have tried a lot of different methods such as:
- include_vars: staging_vars.yml when: environment | staging
and
- include_vars: staging_vars.yml when: "{{environment}} == "staging"
and
- include_vars: staging_vars.yml when: "{{environment}} | match('staging')"
but nothing seems to work. How do I do this?
Details:
- I am using ansible 1.7.2
-
keba over 9 yearsEnvironment works, but environment as you say is used internally and Ansible do say in the docs not to use it. Case is important :)