我正在尝试编写一本跨多个操作系统运行的剧本。此代码片段的目标是显示上次更新的日期。
注意:这与
shell
行无关,我知道它们非常初级,这是关于调试部分。 如何从运行不同操作系统的多个服务器检索日期?
这是我的尝试:
---
- hosts: mysystems
tasks:
- name: Get last update run - Ubuntu
register: lastupdate_u
shell: echo "Last apt activity is $(grep Start-Date /var/log/apt/history.log | tail -n 1 | awk '{print $2}')"
when: ansible_distribution == 'Ubuntu'
- name: Get last update run - RHEL
register: lastupdate_r
shell: echo "Last dnf activity is $(grep 'logging initialized' /var/log/dnf.log | tail -n 1 | awk '{print $1}')"
when: ansible_distribution == 'CentOS' or ansible_distribution == 'RedHat'
- debug:
var: lastupdate_u.stdout_lines, lastupdate_r.stdout_lines
这是输出:
TASK [Get last update run - Ubuntu] ***********************************************************************************************************
skipping: [ANSIBLE]
changed: [MWEBER]
TASK [Get last update run - RHEL] *************************************************************************************************************
skipping: [MWEBER]
changed: [ANSIBLE]
TASK [debug] **********************************************************************************************************************************
ok: [ANSIBLE] => {
"lastupdate_u.stdout_lines, lastupdate_r.stdout_lines": "VARIABLE IS NOT DEFINED!"
}
ok: [MWEBER] => {
"lastupdate_u.stdout_lines, lastupdate_r.stdout_lines": "VARIABLE IS NOT DEFINED!"
}
如果我将脚本更改为一次仅运行一个操作系统,则所有操作系统都可以正常运行。
我做错了什么?
我会将所有日期注册在单个变量
lastupdate
中,而不是lastupdate_u
和lastupdate_r
。然后运行第一个 play,仅包括运行命令并分别注册 lastupdate
的值。在同一剧本中添加仅在本地主机上运行的第二个剧本,您可以在其中从主机变量迭代主机并获取 lastupdate
变量。
---
- hosts: mysystems
tasks:
- name: Get last update run - Ubuntu
register: lastupdate_u
shell: echo "Last apt activity is $(grep Start-Date /var/log/apt/history.log | tail -n 1 | awk '{print $2}')"
when: ansible_distribution == 'Ubuntu'
- name: Get last update run - RHEL
register: lastupdate_r
shell: echo "Last dnf activity is $(grep 'logging initialized' /var/log/dnf.log | tail -n 1 | awk '{print $1}')"
when: ansible_distribution == 'CentOS' or ansible_distribution == 'RedHat'
- hosts: localhost
connection: local
- debug:
var: item.lastupdate.stdout_lines
with_items: hostvars
...
我没有测试代码,但我认为它显示了一般逻辑。 有关主机变量的更多信息这里。