如何使用条件在Ansible中设置变量值?

时间:2017-03-08 00:05:41

标签: ansible

我有两个变量:ab

我想根据以下内容为变量c分配一个值:ab包含更大的数值。

这是我尝试过的:

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

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

看起来始终将c设置为test1而不是test2

1 个答案:

答案 0 :(得分:11)

  • 使用if-else表达式:

    - set_fact:
        c: "{{ 'test1' if (a >= b) else 'test2' }}"
    
  • 使用三元运算符:

    - set_fact:
        c: "{{ (a >= b) | ternary ('test1', 'test2') }}"
    
  • 使用您自己的正确代码(请参阅下面的通知)

上述任何一种方法都要求比较中使用的两个变量具有相同的类型才能给出合理的结果。对于数值比较,它们要求两个值都是整数。

问题的代码:

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

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

在两种情况下正常工作:

  • ab都是整数
  • 两者:ab是包含具有相同位数的数值的字符串

然而,它会产生意想不到的结果:

  • 其中一个值是字符串,另一个是
  • 字符串值包含具有不同位数的数值