Ansible说参数不存在

时间:2018-04-30 11:57:16

标签: ansible

我对Ansible有一个非常奇怪的问题。我的剧本有一个需要的任务

行:"主持所有postgres {{hostvars [item [' ansible_default_ipv4'] ['地址']

在lineinfile操作中。如果在没有--limit = one_host的情况下调用它,它会完美运行,但如果我指定--limit = one_host,则当它执行此任务时,该剧本会抛出错误{" msg":"该任务包括一个带有未定义变量的选项。错误是:' dict object'没有属性' ansible_default_ipv4']

另外,我可以运行:ansible -i environments / sandbox all -m setup --limit = one_host | grep -A 10 ansible_default_ipv4

并查看该剧本需要的数据结构。那么,为什么Ansible说它不存在?

1 个答案:

答案 0 :(得分:1)

ansible_default_ipv4在事实收集阶段计算,但仅在播放目标主机上计算。通过将playbook限制为“one_host'”,不会为其他主机计算此变量,并且正如使用hostvars[item]['ansible_default_ipv4']所建议的那样,您正尝试为其他主机访问该变量。

这是--limit选项的缺点。

解决方案是明确使用setup模块(事实收集中自动使用的模块),在获取此变量所需的所有主机上的循环中,与delegate_to结合使用和delegate_facts(您也可以使用模块的filter选项仅计算' default_ipv4'而不是所有事实。)