Ansible 基于其他变量设置可变变量。其他语言中的If/else等效项

Ansible 基于其他变量设置可变变量。其他语言中的If/else等效项,ansible,Ansible,我如何在ansible中完成下面这样的任务 if prod == true, then var1 = 1 var2 = 2 var3 = 3 else var1 = 4 var2 = 5 var3 = 6 一种选择是使用set_fact。例如下面的剧本 - hosts: localhost vars: prod: true tasks: - set_fact: var1: 1 var2:

我如何在ansible中完成下面这样的任务

if prod == true,
then var1 = 1
     var2 = 2
     var3 = 3
else
     var1 = 4
     var2 = 5
     var3 = 6
一种选择是使用set_fact。例如下面的剧本

- hosts: localhost
  vars:
    prod: true
  tasks:
    - set_fact:
        var1: 1
        var2: 2
        var3: 3
      when: prod|bool
    - set_fact:
        var1: 4
        var2: 5
        var3: 6
      when: not prod|bool
    - debug:
        msg: "{{ var1 }}-{{ var2 }}-{{ var3 }}"
给出:

PLAY [localhost] ******************************************************************************

TASK [set_fact] *******************************************************************************
ok: [localhost]

TASK [set_fact] *******************************************************************************
skipping: [localhost]

TASK [debug] **********************************************************************************
ok: [localhost] => {
    "msg": "1-2-3"
}

PLAY RECAP ************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0

注意。如果要从命令行
--额外变量“prod=false”
设置
prod
,请在任务中显式强制转换
prod | bool
。这些变量都是声明的文本。

我实际上已经在我的剧本中尝试过了。当我运行它时,它会给出一个关于重复dict键的警告,然后我的变量返回为未定义。我将两个集合事实分成两个独立的任务,当我这样运行它时,它只会跳过我的第二个任务。我已经用所有细节更新了答案。请把问题的所有细节都编辑一下。这是你的工作原理,但是当我把它作为一个额外的变量传递进来时,它就失败了(这就是我希望运行它的方式)<代码>--额外变量“prod=false”在任务中显式强制转换prod | bool。