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

问题描述 投票:7回答:1

我有两个变量:ab

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

这就是我试过的:

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

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

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

ansible
1个回答
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是包含具有相同位数的数值的字符串

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

  • 其中一个值是字符串,另一个是整数
  • 字符串值包含具有不同位数的数字值
© www.soinside.com 2019 - 2024. All rights reserved.