Ansible:仅在存在时禁用服务

时间:2017-10-27 12:49:51

标签: ansible

有没有很好的方法来禁用和停止服务,但只有在服务器上安装它?像这样:

Double[]

请注意" only_if_present"是Ansible目前不存在的关键字,但我认为我的目标很明显。

2 个答案:

答案 0 :(得分:5)

我不知道你的包名是什么,但你可以做类似的事情:

- 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
  

更新:我添加了条件,以便当您有多个不同的发行版时,剧本可以正常工作,您可能需要根据自己的要求进行调整。

答案 1 :(得分:1)

系统服务的通用解决方案:

- name: Disable services if enabled
  shell: if systemctl is-enabled --quiet {{ item }}; then systemctl disable {{ item }} && echo disable_ok ; fi
  register: output
  changed_when: "'disable_ok' in output.stdout"
  loop:
    - avahi-daemon
    - abrtd
    - abrt-ccpp

它产生3个状态:

  • 服务已不存在或已禁用-ok
  • 服务存在且已被禁用-changed
  • 服务存在且禁用失败-failed