如何使用Ansible获取系统状态
我有一个简单的如何使用Ansible获取系统状态,ansible,Ansible,我有一个简单的ansibleplaybook来获取etcd服务的状态,如下所示 -名称:检查etcd服务是否正在运行 命令:systemctl status etcd 寄存器:结果 忽略错误:是 但是开始时,此服务可能没有运行 因此,如果服务没有运行,我想启动它。所以这一定是一个有条件的检查,以下是我所做的: -名称:显示报告 调试: var:result.ansible_facts.services[“etcd.service”]。state 但这会产生如下错误: 任务[显示报告]***
ansible
playbook来获取etcd
服务的状态,如下所示
-名称:检查etcd服务是否正在运行
命令:systemctl status etcd
寄存器:结果
忽略错误:是
但是开始时,此服务可能没有运行
因此,如果服务没有运行,我想启动它。所以这一定是一个有条件的检查,以下是我所做的:
-名称:显示报告
调试:
var:result.ansible_facts.services[“etcd.service”]。state
但这会产生如下错误:
任务[显示报告]**********************************************************
确定:[35.236.98.212]=>{
“result.ansible_facts.services[“etcd.service”].state:”“未定义变量!”
我如何检查etcd
服务的状态,如果它未运行,我想启动该服务,如果它已经运行,则保持原样
有人能帮帮我吗?你把很多事情搞混了。
shell
如果你注册结果,会有效地返回一些信息。但是结果不会包含任何ansible\u facts.services
条目
此名称与返回的名称类似。您需要运行它以填充主机事实中的相应信息:
-name:获取所有主机的服务事实
服务信息:
-名称:显示其工作的虚拟任务
调试:
var:ansible_事实服务
现在,您还应该了解ansible是关于描述您连接到的远程目标的预期状态的。在服务方面,如果您想确保特定的服务已启动并且将始终在引导时启动(并且理所当然地认为它由systemd管理),您所要做的就是:
-name:确保etcd已启动并启用
系统D:
姓名:etcd
国家:开始
已启用:true
这项任务将:
- 启动时启用
(如果尚未启用)etcd
- 如果尚未启动,则启动
etcd
- 如果已启用并启动,则不执行任何操作,只报告“OK”
更一般地说,当已经有一个ansible模块在执行任务时,您应该避免使用
shell/command
。您可以在此处使用service\u facts模块
比如说
-主机:主机组
收集事实:错误
变成:是的
任务:
-名称:将服务状态信息作为事实数据返回
服务信息:
-名称:显示etcd服务的状态
调试:
var:ansible_facts.services['etcd.service']['state']
-名称:如果etcd服务未运行,则启动etcd服务
服务:
名称:etcd.service
国家:开始
时间:ansible_facts.services['etcd.service']['state']!='running'
关于上一项任务的when
子句的意义是什么?服务
(几乎每个ansible模块都是如此)是幂等的。如果服务已经启动,它将不会做任何事情,只报告OK。@Zeitounator是的,您是对的。感谢您的响应。仍然“when”用作任务中的信息。IMO有一个冗余信息:“如果服务未启动,请启动服务”这已经是模块所做的。此外,这迫使您收集服务事实。