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
Share:
102,665
Jordan Ell
Author by

Jordan Ell

Updated on September 03, 2020

Comments

  • Jordan Ell
    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
    keba over 9 years
    Environment works, but environment as you say is used internally and Ansible do say in the docs not to use it. Case is important :)