避免在剧本中使用未使用和未定义的变量

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