通过ansible模块的服务状态(不是通过“shell”或“c ommand”)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过ansible模块的服务状态(不是通过“shell”或“c ommand”)相关的知识,希望对你有一定的参考价值。
通过Ansible-Playbook我想首先检查服务的存在(运行),然后停止服务,如mongod。
以下是停止服务的代码:
- name: stop
service:
name: mongod
state: stopped
但是如果你第二次运行上面的脚本,那么它会给你一个错误,表明服务没有运行。
如何在运行此脚本之前检查状态?如何确保服务正在运行然后停止它。
我不想在剧本中使用“shell”或“命令”选项,我想使用ansible模块。
以下解决方案:How to get service status by Ansible?正在使用shell或命令
答案
不幸的是我找不到答案,所以我坚持使用旧的解决方案:
- name: Check if mongod is active
command: systemctl status mongod
register: deb_check
ignore_errors: yes
no_log: True
failed_when: false
# I ignored all errors when the process is dead
- name: Stop mongof if it is active otherwise SKIP
service:
name: mongod
state: stopped
when: deb_check.stdout.find('dead') == -1
如果您找到了解决方案,请告知。
另一答案
正确的答案是使用处理程序,它们尤其可以避免多次启动或停止服务,因为处理程序将仅在游戏结束时执行。
你可以试试这样的东西:
tasks:
- name: Check if mongod is active
command: systemctl status sshd
register: deb_check
ignore_errors: yes
no_log: True
failed_when: false
- name: Raise a flag whenever the service should be stopped
notify: stop mongod
when: '"dead" in deb_check.stdout'
handlers:
- name: stop mongod
service:
name: mongod
state: stopped
以上是关于通过ansible模块的服务状态(不是通过“shell”或“c ommand”)的主要内容,如果未能解决你的问题,请参考以下文章