给定一组先前的任务,其结果我登记, 我想要:
- 启用我的目标服务。
- 当任何依赖项发生变化时,重新启动/重新加载它。
答案1
这对我有用:
- name: "Enable and (re)start service {{ service_name|mandatory }}"
systemd:
name: "{{ service_name }}"
daemon_reload: "{{ restart }}"
enabled: yes
state: "{{ restart|ternary('restarted', 'started') }}"
vars:
restart: "{{ registered|flatten|selectattr('changed')|length > 0 }}"
其中registered
包含已注册依赖项的列表,例如:
vars:
registered: "{{ [registered_outcome_1, ...] }}"
该|flatten
表达式确保它也适用于循环任务。
我还发现将它与根据名称查找已注册的变量这样我就可以列出已注册变量的名称,而不必使用构建列表{{ [ ... ] }}
。
更好的解决方案是运行systemctl reload-or-restart ...
:
如果支持,请重新加载一个或多个单元。如果不支持,请停止它们,然后启动它们。如果单元尚未运行,则将启动它们。
但不支持目前由 Ansible 提供。