Ansible:仅在存在时禁用服务

Pet*_*etr 3 ansible

有什么好办法可以禁用和停止服务,但前提是该服务必须安装在服务器上?像这样:

- service: name={{ item }} enabled=no state=stopped only_if_present=yes
  with_items:
  - avahi-daemon
  - abrtd
  - abrt-ccpp
Run Code Online (Sandbox Code Playgroud)

请注意,“ only_if_present”是Ansible中目前不存在的关键字,但是我想我的目标很明显。

sys*_*m1n 6

我不知道您的情况下的软件包名称是什么,但是您可以执行以下操作:

- shell: dpkg-query -W 'avahi'
  ignore_errors: True
  register: is_avahi
  when: ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu'

- shell: rpm -q 'avahi'
  ignore_errors: True
  register: is__avahi
  when: ansible_distribution == 'CentOS' or ansible_distribution == 'Red Hat Enterprise Linux'

- service: name=avahi-daemon enabled=no state=stopped
  when: is_avahi|failed
Run Code Online (Sandbox Code Playgroud)

更新:我添加了条件,以便当您有多个不同发行版时,该剧本都可以使用,您可能需要对其进行调整以适合您的要求。