避免在剧本中使用未使用和未定义的变量
Avoid unused and undefined variable in playbook
我在变量文件中有以下数据
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 未定义
或者在 playbook 的 vars 属性中使用虚假的虚拟数据。在保持标准的同时有什么办法解决这个问题。此外,实际数据非常庞大,所以我不想为每个剧本重复两次。
在 Ansible 中,数据必须分配给主机而不是剧本。
您必须创建两个主机组。那些只需要两个变量的主机进入第一组。那些需要 3 个变量的主机进入两组。您可以将第一组的主机包含在第二组中。
然后创建两个组变量文件。在第一个中你放了 2 个变量,在第二个中放了第三个变量。
这样每台主机都能获得正确数量的信息。剧本 1 使用 3 个变量,剧本 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
我在变量文件中有以下数据
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 未定义
或者在 playbook 的 vars 属性中使用虚假的虚拟数据。在保持标准的同时有什么办法解决这个问题。此外,实际数据非常庞大,所以我不想为每个剧本重复两次。
在 Ansible 中,数据必须分配给主机而不是剧本。
您必须创建两个主机组。那些只需要两个变量的主机进入第一组。那些需要 3 个变量的主机进入两组。您可以将第一组的主机包含在第二组中。
然后创建两个组变量文件。在第一个中你放了 2 个变量,在第二个中放了第三个变量。
这样每台主机都能获得正确数量的信息。剧本 1 使用 3 个变量,剧本 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