如何通过Ansible with modules而不是shell查看单个服务状态?
需要使用Ansible playbook检查多个系统上的单一服务状态,有没有办法使用服务模块而不是shell模块 使用如何通过Ansible with modules而不是shell查看单个服务状态?,ansible,ansible-2.x,ansible-facts,Ansible,Ansible 2.x,Ansible Facts,需要使用Ansible playbook检查多个系统上的单一服务状态,有没有办法使用服务模块而不是shell模块 使用服务模块(以及相关的更具体的模块,如systemd),您可以确保服务处于所需状态 例如,以下任务将启用apache启动启动(如果尚未配置)、启动(如果停止)以及报告更改(如果进行了任何更改)或确定(如果不需要更改) - name: Enable and start apache service: name: apache enabled: yes st
服务
模块(以及相关的更具体的模块,如systemd
),您可以确保服务处于所需状态
例如,以下任务将启用apache启动启动(如果尚未配置)、启动(如果停止)以及报告更改(如果进行了任何更改)或确定(如果不需要更改)
- name: Enable and start apache
service:
name: apache
enabled: yes
state: started
这些模块不支持只检查服务状态而不进行任何更改。您必须使用命令行分析输出/返回状态
systemd示例
- name: Check status of my service
command: systemctl -q is-active my_service
check_mode: no
failed_when: false
changed_when: false
register: my_service_status
- name: Report status of my service
debug:
msg: "my_service is {{ (my_service_status.rc == 0) | ternary('Up', 'Down') }}"
需要注意的是:
在ansible_playbook命令行上使用“--check”时让任务运行。否则,在检查模式下,下一个任务将因未定义变量而失败check_模式:否
在返回代码不同于0(服务未启动时)时阻止任务失败。您可以更具体地列出正常情况下所有可能的返回代码,并在获得其他返回代码时失败(例如,failed\u when:false
)失败\u当:not(我的服务\u状态为[0,3,X])
使任务始终报告ok,除了默认情况下命令和shell模块的changed\u when:false
changed
服务
模块(以及相关的更具体的模块,如systemd
),您可以确保服务处于所需状态
例如,以下任务将启用apache启动启动(如果尚未配置)、启动(如果停止)以及报告更改(如果进行了任何更改)或确定(如果不需要更改)
- name: Enable and start apache
service:
name: apache
enabled: yes
state: started
这些模块不支持只检查服务状态而不进行任何更改。您必须使用命令行分析输出/返回状态
systemd示例
- name: Check status of my service
command: systemctl -q is-active my_service
check_mode: no
failed_when: false
changed_when: false
register: my_service_status
- name: Report status of my service
debug:
msg: "my_service is {{ (my_service_status.rc == 0) | ternary('Up', 'Down') }}"
需要注意的是:
在ansible_playbook命令行上使用“--check”时让任务运行。否则,在检查模式下,下一个任务将因未定义变量而失败check_模式:否
在返回代码不同于0(服务未启动时)时阻止任务失败。您可以更具体地列出正常情况下所有可能的返回代码,并在获得其他返回代码时失败(例如,failed\u when:false
)失败\u当:not(我的服务\u状态为[0,3,X])
使任务始终报告ok,除了默认情况下命令和shell模块的changed\u when:false
changed