如何通过Ansible使用模块而不是Shell查看单一服务状态?

时间:2019-03-27 18:44:43

标签: ansible ansible-2.x ansible-facts

需要使用Ansible剧本检查多个系统上的Single Service状态,有没有办法使用服务模块而不是Shell模块?

1 个答案:

答案 0 :(得分:0)

使用service模块(以及相关的更具体的模块,例如systemd),您可以确保服务处于所需状态。

例如,以下任务将使apache在启动时(如果尚未配置)启动;在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') }}"

请注意:

  • check_mode: no使任务是否继续运行,您可以在ansible_playbook命令行上使用'--check'。否则,在检查模式下,下一个任务将失败,并带有一个未定义的变量。
  • failed_when: false限制了当返回码不同于0(未启动服务)时任务失败。您可以通过列出正常情况下所有可能的返回码,而在得到另一个返回码(例如failed_when: not (my_service_status in [0, 3, X]))时失败,来更具体地说明
  • changed_when: false使任务始终报告正常,默认情况下,对于命令和shell模块,changed除外。