Ansible 仅当安装了软件包时才禁用systemd服务
这就是我所拥有的Ansible 仅当安装了软件包时才禁用systemd服务,ansible,Ansible,这就是我所拥有的 - name: disable os firewall - firewalld systemd: name: firewalld state: stopped enabled: no 此任务在安装了firewalld软件包的主机上正常工作,但在未安装的主机上失败 确保它能够处理未安装firewalld的主机的最佳简单方法是什么?我不想使用任何CMDB,因为它是一个附加设置。而且,我希望任务是幂等的;使用类似于dpkg或rpm的shell命令来查询是
- name: disable os firewall - firewalld
systemd:
name: firewalld
state: stopped
enabled: no
此任务在安装了firewalld
软件包的主机上正常工作,但在未安装的主机上失败
确保它能够处理未安装firewalld
的主机的最佳简单方法是什么?我不想使用任何CMDB,因为它是一个附加设置。而且,我希望任务是幂等的;使用类似于dpkg
或rpm
的shell命令来查询是否安装了firewalld
,会使ansible playbook摘要报告发生我不希望发生的更改
确保它能够处理未安装firewalld
的主机的最佳方法是什么
从任何类型的CMDB(如Ansible vars文件,因为您已经使用Ansible)获取有关安装了哪些系统的信息,并在这些系统上运行任务
同样,不要在没有根据从CMDB提取的配置安装firewalld
的系统上运行任务
实际执行情况各不相同。其中包括:为播放指定适当的主机组,在任务中使用条件,对库存使用限制选项。在Ansible播放中。在尝试停止/启动软件包之前,可以先检查软件包是否已安装
类似于此:以下是一个使用
失败的示例:
。虽然每次都会运行,但如果未安装软件包,则会忽略故障:
- 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"
采用
shell
方法:
-name:如果启用,则禁用{{service}
shell:如果启用了systemctl——quiet{{service};然后systemctl disable{{service}}&&echo disable\u ok;fi
寄存器:输出
更改了输出.stdout中的“禁用\u确定”时的\u
它产生3种状态:
- 服务不存在或已禁用-
ok
- 服务存在且已禁用-
已更改
- 服务存在并禁用失败-
失败
chronyd\u服务结果|失败
是chronyd\u服务结果失败