Ansible:如何禁用但正在运行的服务?

2024-02-05

我想遍历很多主机并获取所有手动启动的服务(systemctl start xxxx)而无需先启用(systemctl enable xxxx),反之亦然所有已禁用(systemctldisable xxxx)但仍在运行的服务(因为还没有停止)。

我不想自动“修复”上述所有发现的问题,而是希望将它们输出到我的 shell 中。

类似于 for every 循环systemctl list-unit-files --state=disabled并运行每一行systemctl is-active可能会工作,但我需要将一个小的 SH 脚本传输到每个主机......

这可以仅由 Ansible 完成吗? (使用带有内核 3.10.x 的 RHEL7 Update 7)

编辑:到目前为止,这是我的剧本,但我无法让循​​环工作:

---
- hosts: all
  gather_facts: no
  tasks:
     - name: get service facts
       service_facts:
     - name: show report
       when:
        - ansible_facts.services[item + '.service'].state == 'running'
        - ansible_facts.services[item + '.service'].status == 'disabled'
       debug:
         msg: "{{ ansible_facts.services[item + '.service'].status == 'disabled' }}"
       loop:
         ansible_facts.services

关于你的问题

这可以仅由 Ansible 完成吗?

简短的回答是:是的,当然。这就是 Ansible 的用途。

关于你的标题

如何禁用但运行服务?

和评论

您是否尝试过 ansible.builtin.service_facts

我准备了一个简短的测试,它将显示以下结构ansible_facts.services.

---
- hosts: localhost
  become: no
  gather_facts: no

  tasks:

  - name: Gather Service Facts
    service_facts:

  - name: Show Service Facts
    debug:
      msg: "{{ ansible_facts.services }}"

例如,其中一项服务

auditd.service:
  name: auditd.service
  source: systemd
  state: running
  status: enabled

所以你需要循环结果集并寻找ansible_facts.services[YOURSERVICE].state and ansible_facts.services[YOURSERVICE].status.

关于你的描述

...已禁用(systemctl禁用xxxx)但仍在运行的服务(因为尚未停止)...

你可以看看答案如何声明变量service_facts https://stackoverflow.com/a/69476972/6771046.

关于您的评论

...我如何为所有服务执行条件...

以及已经提到的结果循环,我已经为测试设置添加了

- name: Loop over all services and print name
  debug:
    msg: "{{ item }}"
  when:
    - ansible_facts.services[item].state == 'running'
    - ansible_facts.services[item].status != 'enabled'
  with_items: "{{ ansible_facts.services }}"

并发现它有效。

您可能需要调整条件,因为该查询将报告服务的状态static like dbus or systemd-journald也。另请注意,服务也可以有unknow地位。在例子中

splunk.service:
  name: splunk.service
  source: systemd
  state: running
  status: unknown

or

systemctl status splunk
● splunk.service - SYSV: Splunk indexer service
   Loaded: loaded (/etc/rc.d/init.d/splunk; bad; vendor preset: disabled)
   Active: active (running) ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ansible:如何禁用但正在运行的服务? 的相关文章

随机推荐