首页 > 解决方案 > 当 Ansible 中的所有主机的gather_facts 设置为“no”时,如何在 Ansible 中收集 localhost 事实?

问题描述

我的剧本使用路由器作为主机来执行任务。我已禁用主机的事实,但我需要ansible_date_time从运行剧本的本地主机访问。本地主机是 Ubuntu VM。

这是我的剧本的样子:

---
- hosts: lab
  gather_facts: no

  tasks:   
    - name: Run block tasks
      delegate_to: 127.0.0.1
      block:
        - name: Get cert serial number using OpenSSL
          shell: |
            openssl s_client -connect {{ inventory_hostname }}:50051 2>/dev/null  | sed -n -e '/BEGIN\ CERTIFICATE/,/END\ CERTIFICATE/ p' |openssl x509 -noout -serial  | cut -d'=' -f2 | sed -e 's/\(.*\)/\L\1/'
          register: serialNum
      
        - name: Print Serial Numbers
          debug:
            msg: "{{ serialNum.stdout_lines }}"

    - name: Ansible fact - ansible_date_time
      # gather_facts: yes
      delegate_to: 127.0.0.1
      debug:
        var: ansible_date_time.date

gather_facts: yes自从错误出现以来,我无法完成最后一项任务。

如果我在播放级别启用gather_facts: yes,那么我会得到路由器的事实,这不是我想要的。

如上所述运行剧本会给我以下消息:

TASK [Ansible fact - ansible_date_time] ***************************************************************************************************************************************************
ok: [router1.mgt.net] => {
    "ansible_date_time.date": "VARIABLE IS NOT DEFINED!"
}

这可能与Ansible有关吗?

标签: ansible

解决方案


该任务setup可用于此目的。这实际上是 Ansible 在后台调用的任务,当您拥有gather_facts: yes.

为此,您甚至不需要收集所有事实,您可以使用参数的最小子集来完成gather_subset

鉴于剧本:

- hosts: localhost
  gather_facts: no

  tasks:
    - setup:
        gather_subset:
          - 'min'
    - debug:
        var: ansible_date_time.date

这将产生回顾:

PLAY [localhost] *************************************************************************************************

TASK [setup] *****************************************************************************************************
ok: [localhost]

TASK [debug] *****************************************************************************************************
ok: [localhost] => 
  ansible_date_time.date: '2021-07-08'

PLAY RECAP *******************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

推荐阅读