Binny Thomas
Binny Thomas

Reputation: 51

Conditional ansible to set variable

Tried all luck but doesnot work. I would require to set the environment variable check with a condition and then run a play or task on the main.yml while doing includes and using 2 tasks.

main.yml

- include: createnonprod.yml
when: "{{ environment }}" == 'dev' or "{{ environment }}" == 'qa' or "
{{ environment }}" == 'preprod'

- include: createprod.yml
when: "{{ environment }}" == 'prod'

The environment is set on groups_vars variable file "all" environment:

"{{ lookup('env','ENVIRONMENT') }}"

But this logic to check fails

(Or)

I need to run this logic so that it calls the task with a condition to check the variable

create.yml

- name: Install all users from IAM of the AWS Account.
  shell: "{{ scriptdir }}/install.sh -i {{ iamgroup }},{{ sudogroup }} -s {{ sudogroup }}"
  when: "{{ environment }}" == 'dev' or "{{ environment }}" == 'qa' or "{{ environment }}" == 'preprod'

- name: Install all users from IAM of the AWS Account.
  shell: "{{ scriptdir }}/install.sh -i {{ iamgroup }},{{ sudogroup }} -s {{ sudogroup }}"
  when: "{{ environment }}" == 'prod' 

Please help me with a logic that works. I get this error:

fatal: [localhost]: FAILED! => {"failed": true, "reason": "ERROR! 
Syntax Error while loading YAML.\n\n\nThe error appears to have been in 
'/tmp/ansible/roles/provision/users/tasks/create.yml': line 18, column 
22, but may\nbe elsewhere in the file depending on the exact syntax 
problem.\n\nThe offending line appears to be:\n\n  when:\n    - {{ 
env_type }} == 'dev'\n                     ^ here\nWe could be wrong, 
but this one looks like it might be an issue with\nmissing quotes.  
Always quote template expression brackets when they\nstart a value. For 
instance:\n\n    with_items:\n      - {{ foo }}\n\nShould be written 
as:\n\n    with_items:\n      - \"{{ foo }}\"\n"}

Upvotes: 1

Views: 7709

Answers (2)

Kenji
Kenji

Reputation: 33

What if you try this way.

Define a variable to handle the lookup of your environment:

vars:
  env_value: "{{ lookup('env', 'ENVIRONMENT') }}"

and then use this variable in the when condition:

when: env_value == "dev"

Simple example:

- hosts: "localhost"
  vars:
    env_value: "{{ lookup('env', 'ENVIRONMENT') }}"
  tasks:
  - shell: echo "I've got {{ env_value }} and am not afraid to use it!"
    when: env_value == "prd"

Example in your code:

- name: Install all users from IAM of the AWS Account.
  shell: "{{ scriptdir }}/install.sh -i {{ iamgroup }},{{ sudogroup }} -s {{ sudogroup }}"
  when: env_value == 'dev' or env_value == 'qa' or env_value == 'preprod'

Please, also look at this link about Ansible environment variable name being reserved.

Upvotes: 1

helloV
helloV

Reputation: 52375

The When Statement

The when clause, which contains a raw Jinja2 expression without double curly braces

when: environment == 'dev' or environment == 'qa' or environment == 'preprod'

when: environment == 'prod'

Upvotes: 2

Related Questions