AnonymousAlias
AnonymousAlias

Reputation: 1399

Does Ansible have an else condition

So far I can see using a when in ansible to determin whether to run a task but do I have to define 2 tasks to run the alternative option..

example - if I want to run the following task then run the debug task, i need to run two tasks or existStatus will not have been defined for the debug statement. Can I not use some sort of if else statement rather than include 2 separate tasks?

- name: Print user does not exist status
  shell: echo 'user does not exist'
  when: kafka_configs_result.stdout_lines[1] == '1'
  register: existStatus

- name: Print user does not exist status
  shell: echo 'user already exists so could not be created'
  when: kafka_configs_result.stdout_lines[1] == '0'
  register: existStatus

- debug: msg="{{ existStatus.stdout_lines }}"

Upvotes: 0

Views: 104

Answers (2)

Pacifist
Pacifist

Reputation: 3203

You can write something like this to utilize if-loop

 - set_fact: build="{% if '<something>' in <something> %}<VALUE>{% else %}<VALUE>{% endif %}"

Upvotes: 2

Zeitounator
Zeitounator

Reputation: 44615

You can do this in one single task without having to go through an unneeded shell execution. A simple way is to use a test and the ternary filter

I added the var section simply for readability. You can make a long one liner if you wish.

- debug:
    vars:
      exists_test: "{{ kafka_configs_result.stdout_lines[1] == '1' }}"
      msg_exists: "user already exists so could not be created"
      msg_notexists: "user does not exist"
    msg: "{{ exists_test | ternary(msg_notexists, msg_exists) }}"

Upvotes: 2

Related Questions