通过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”)的主要内容,如果未能解决你的问题,请参考以下文章

Ansible 自动化运维工具简单入门

Ansible之常用模块

如何通过Ansible来管理上千台服务器??

Ansible

Ansible常用模块使用

第4天:Ansible模块