ansible - 当 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有关吗?
解决方案
该任务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
推荐阅读
- python - 使用 python 检查 Internet 连接
- reactjs - 使用material-ui进行react-hook-form验证-未插入第一个击键
- in-app-billing - Google Developer Console 中的订阅被卡在“非活动”状态
- c - 为什么名称字符串 ie gets 在我的程序中只执行一次?
- amazon-web-services - Amazon Transcribe - 我应该使用音频预处理还是 Amazon 会这样做?
- kubernetes - 使用 nginx-ingress 和 keycloak 在 Kubernetes 中进行身份验证的正确设计是什么
- laravel - 私人频道授权 - 一对一聊天
- python - 在 Windows subprocess.call 中运行的 Python 带有空格和参数
- reactjs - TypeError:无法读取未定义 Socket.io 的属性“发射”
- if-statement - 如何有条件地选择变量?