【发布时间】:2021-01-21 18:54:55
【问题描述】:
我正在使用 Ansible 2.6.1。
我正在尝试确保某些服务未在目标主机上运行。
问题是某些主机上可能根本不存在该服务。如果是这种情况,Ansible 由于缺少服务而失败并出现错误。服务由Systemd 运行。
使用服务模块:
- name: Stop service
service:
name: '{{ target_service }}'
state: stopped
失败并出现错误Could not find the requested service SERVICE: host
尝试使用命令模块:
- name: Stop service
command: service {{ target_service }} stop
给出错误:Failed to stop SERVICE.service: Unit SERVICE.service not loaded.
我知道我可以使用ignore_errors: yes,但它也可能隐藏真正的错误。
另一种解决方案是有 2 个任务。一个检查服务是否存在,另一个只在第一个任务找到服务但感觉很复杂时运行。
是否有更简单的方法来确保服务停止并在服务不存在时避免错误?
【问题讨论】:
-
这是XY problem。更好地专注于了解什么在哪里运行。
-
这不是 XY 问题。详细信息超出了此问题的范围,但在这种情况下无法预测服务在哪些主机上运行。 (运行该服务的主机数量以及应该运行该服务的主机数量取决于主机负载和使用该服务的客户端数量动态决定。)为了安全地运行维护操作,所述服务不能运行。无论服务是否存在,维护操作都需要在所有主机上运行,因此确保服务没有运行任何目标主机是有意义的。
-
根据您的服务,您可以创建一个任务来检查该服务的软件包是否已安装,然后仅在该服务存在时才停止该服务。
-
确保服务已停止并不断停止的最简单方法是卸载它。
标签: ansible