Ansible 基于其他变量设置可变变量。其他语言中的If/else等效项
我如何在ansible中完成下面这样的任务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:
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。