How can I use a condition to set a variable value in Ansible?

  • Using if-else expression:

    - set_fact:
        c: "{{ 'test1' if (a >= b) else 'test2' }}"
    
  • Using ternary operator:

    - set_fact:
        c: "{{ (a >= b) | ternary ('test1', 'test2') }}"
    
  • Using your own code which is correct (see the notice below)


Either of the above methods requires both variables used in comparison to be of the same type to give sensible results. And for a numerical comparison, they require both values to be integers.

The code from the question:

- set_fact:
    c: "test1"
  when: a <= b

- set_fact:
    c: "test2"
  when: b <= a

works properly in two cases:

  • both: a and b are integers
  • both: a and b are strings containing numerical value with the same number of digits

However it produces unexpected result is when:

  • one of the values is string and the other integer
  • the string values contain numerical values with different number of digits