Ansible 根据条件收集缓存的操作系统事实

问题描述 投票:0回答:1

我正在使用以下内容根据“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 ansible-facts
1个回答
0
投票

问:“我正在使用以下内容根据

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

以及缓存的事实。

更多文档

© www.soinside.com 2019 - 2024. All rights reserved.