【发布时间】:2021-07-08 16:31:00
【问题描述】:
我的剧本使用路由器作为主机来执行任务。我已禁用主机的事实,但我需要从运行剧本的本地主机访问ansible_date_time。本地主机是 Ubuntu 虚拟机。
这就是我的剧本的样子:
---
- 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 有关吗?
【问题讨论】:
-
这里的问题是
delegate_to没有委托事实。因此,必须为运行任务的lab组中的当前主机定义ansible_date_time.date。一旦你知道这一点,请注意:委派调试任务是完全没用的:它会在你委派给的任何主机上运行,并在播放循环中显示来自当前主机的变量。
标签: ansible