我正在从这本书中学习 Ansible,它包含这个实验:
根据以下规范编写剧本:
- 必须使用 cron 模块在每个工作日凌晨 2 点重新启动托管服务器
- 重新启动后,必须将一条消息写入系统日志,其中包含文本“CRON 启动重新启动已完成”
- 默认 systemd 目标必须设置为多目标
- 最后一个任务应该使用服务事实来显示 cron 进程的当前版本
最后一点有点令人困惑。 service_facts 模块仅检索与 crond 的名称、来源、状态和状态相关的事实,但不检索版本。如何实现这一目标?
答案1
这可能是一个错误。该请求看起来可疑(或至少不明确)'use service facts to show the current version of the cron process'
:。的属性中没有版本服务事实,例如(在 Ubuntu 上运行)
- service_facts:
- debug:
var: ansible_facts.services['cron.service']
给出
ansible_facts.services['cron.service']:
name: cron.service
source: systemd
state: running
status: enabled
而且,'version of process'
看起来很奇怪。也许他们想要'PID of process'
?在这种情况下,使用系统,例如
- systemd:
name: "{{ ansible_facts.services['cron.service']['name'] }}"
register: result
- debug:
var: result.status.ExecMainPID
给出
result.status.ExecMainPID: '884'
(也可以看看:shell> systemctl status cron.service
)
下一个选择可能就是他们想要的'version of cron binary'
。在这种情况下,使用包事实,例如
- package_facts:
- debug:
var: ansible_facts.packages.cron.0.version
给出
ansible_facts.packages.cron.0.version: 3.0pl1-136ubuntu1
查看更复杂的选项如何获取正在运行的 cron 守护进程的版本。它们也可能在 Ansible 中实现自动化。