仅当安装了软件包时才禁用 systemd 服务

GMa*_*ter 5 ansible

这就是我所拥有的

- name: disable os firewall - firewalld
  systemd:
    name: firewalld
    state: stopped
    enabled: no
Run Code Online (Sandbox Code Playgroud)

此任务在firewalld安装了软件包的主机上运行良好,但在未安装软件包的主机上失败。

确保它可以处理未firewalld安装的主机的最佳简单方法是什么?我不想使用任何 CMDB,因为它是一个额外的设置。另外,我希望任务是幂等的;使用像dpkgrpm查询是否firewalld安装的 shell 命令使 ansible playbook 摘要报告更改,这是我不想要的。

ore*_*rev 5

这是一个使用failed_when:. 虽然它每次都运行,但如果没有安装包,它会忽略失败:

- name: Stop and disable chrony service
  service:
    name:    chronyd
    enabled: no
    state:   stopped
  register: chronyd_service_result
  failed_when: "chronyd_service_result is failed and 'Could not find the requested service' not in chronyd_service_result.msg"
Run Code Online (Sandbox Code Playgroud)