我正在使用以下内容根据“ansible_system”事实收集某些操作系统事实:
---
- name: Gather facts from all target hosts
hosts: all
gather_facts: false
tasks:
- name: Gather OS information for linux
set_fact:
os_version: "{{ ansible_facts[distribution] }} {{ ansible_facts[distribution_version] }}"
when: ansible_facts[system] == "Linux"
- name: Gather OS information for Windows
set_fact:
os_version: "{{ ansible_facts[ansible_os_name] }}"
when: ansible_facts[system] is search("Win")
- name: Set unknowm if not linux or windows
set_fact:
os_version: 'unknown'
when:
- not ansible_facts[system] is search("Win")
- not ansible_facts[system] == "Linux"
库存中的所有主机均出现以下错误:
"msg": "条件检查 'ansible_facts[system] == "Linux"' 失败的。错误是:评估条件时出错 (ansible_facts[system] == "Linux"): 'system' 未定义。
但是,当检查所有失败的主机时,我已经验证了所有主机都具有该缓存的事实,例如:
"ansible_system": "Linux",
"ansible_cmdline": {
"ro": true,
"root": "UUID=fcd2fe34-d0d2-4d03-8c17-0a5d8e61cfee",
"BOOT_IMAGE": "/boot/vmlinuz-5.4.0-193-generic",
"maybe-ubiquity": true },
我是否试图以错误的方式了解事实?
我相信我可以使用:
ansible_facts[system] == "Linux"
或
ansible_system == "Linux"
问:“我正在使用以下内容根据
ansible_system
事实收集某些操作系统事实”
不,根据你的
gather_facts: false
你根本没有收集事实。
问:“_我已验证所有人都拥有该缓存事实_”
是的,但这不是它的工作原理,具体取决于配置。请参阅示例 如何缓存 Ansible 事实
设置缓存插件数据的过期超时(以秒为单位)。为了确保数据不会过期,请将此选项设置为fact_caching_timeout
。 ...当0
过期时,所有需要事实并将选项fact_caching_timeout
设置为gather_facts
的剧本将不起作用。要使它们发挥作用,请刷新缓存中的事实数据。false
一个最小的示例手册
---
- hosts: test
become: false
gather_facts: false
tasks:
- debug:
var: ansible_facts
将产生
的输出TASK [debug] *********
ok: [test.example.com]
ansible_facts: {}
即使有配置
ansible.cfg
fact_path = /etc/ansible/facts.d
fact_caching = yaml
fact_caching_connection = /tmp/ansible/facts_cache
fact_caching_timeout = 129600
并且已经有可用的缓存事实。设置
fact_caching_timeout = 0
将导致输出
TASK [debug] *********
ok: [test.example.com]
ansible_facts:
discovered_interpreter_python: /usr/libexec/platform-python
test: test
以及缓存的事实。
更多文档