我在变量文件中有以下数据
data: [
{
service: "ServiceName",
var2: "file/path/value",
var3: "{{ check_var }}",
}, {
service: "ServiceName",
var2: "file/path/value",
var3: "{{ check_var }}",
}
]
我有两个需要相同数据的剧本。但是,一本剧本不需要 var3 。
- debug: msg="{{ item['service'] }} uses - {{ item['var2'] }}"
with_items: "{{ data }}"
这会导致错误-“'check_var'未定义” 。
尝试:
我不想用不良标准填充剧本并使用
何时:未定义check_var
或者在剧本的vars atrribute中使用错误的伪数据。在维持标准的同时,有什么办法吗?另外,实际数据非常庞大,因此我不想为每个剧本重复两次。
答案 0 :(得分:1)
在Ansible中,必须将数据分配给主机,而不要分配给剧本。
您必须创建两个主机组。那些只需要两个变量的主机进入第一组。那些需要3个变量的主机将分为两组。您可以将第一组的主机包括在第二组中。
然后创建两个组var文件。在第一个变量中放置2个变量,在第二个变量中放置第3个变量。
通过这种方式,每个主机都可以获取正确数量的信息。 Playbook 1使用3个变量,Playbook 2仅使用2个变量。
更新:最小示例
$ diff -N -r none .
diff -N -r none/check_var.yaml ./check_var.yaml
0a1,4
> ---
> - hosts: localhost
> tasks:
> - debug: var=check_var
diff -N -r none/group_vars/myhosts.yaml ./group_vars/myhosts.yaml
0a1
> check_var: "Hello World!"
diff -N -r none/inventory ./inventory
0a1,2
> [myhosts]
> localhost
$ ansible-playbook -i inventory check_var.yaml
PLAY [localhost] ***************************************************************************
TASK [Gathering Facts] *********************************************************************
ok: [localhost]
TASK [debug] *******************************************************************************
ok: [localhost] => {
"check_var": "Hello World!"
}
PLAY RECAP *********************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0