首页 > 解决方案 > 为什么 ansible ad hoc 调试模块不打印变量?

问题描述

我正在尝试通过运行来调试我的 ansible 设置

ansible -m debug -a 'var=ansible_distribution' all

但我得到

my_ansible_host0 | SUCCESS => {
    "ansible_distribution": "VARIABLE IS NOT DEFINED!"
}

不过,似乎我可以{{ansible_distribution}}在我的 jinja 模板中使用。为什么是这样?(例如,这是否与我还无法弄清楚的事实和变量之间的区别有关?)我怎样才能改变我的命令来让它打印出 的值ansible_distribution?(我需要做些什么lookup(...)吗?)

标签: ansible

解决方案


当你运行一个游戏时,这个ansible_distribution事实是由模块隐式创建的。setup在运行 playbook 时,您可能已经注意到这一点:

TASK [Gathering Facts] ****************************************************************

这是 Ansible 运行setup模块以获取有关远程主机的信息。当您运行临时命令时,没有“收集事实”步骤,因此这些变量不可用。

如果要查看变量的值ansible_distribution和其他变量,可以手动运行setup模块:

ansible -m setup all

您可以使用设置模块的参数来限制收集的事实。例如:

$ ansible localhost -m setup -a 'filter=ansible_dist*'

localhost | SUCCESS => {
    "ansible_facts": {
        "ansible_distribution": "Fedora",
        "ansible_distribution_file_parsed": true,
        "ansible_distribution_file_path": "/etc/redhat-release",
        "ansible_distribution_file_variety": "RedHat",
        "ansible_distribution_major_version": "31",
        "ansible_distribution_release": "",
        "ansible_distribution_version": "31"
    },
    "changed": false
}

推荐阅读