Ansible v2.11中能否对字典反向遍历以按正确顺序停止服务?
Ansible v2.11 反向遍历字典实现按依赖顺序停止服务
可以通过反向遍历字典的方式满足需求,你使用的v2.11版本完全支持该操作。
实现逻辑
Ansible 2.7及以后版本默认保留YAML字典的插入顺序,你定义的exa_web_services字典插入顺序为:
- EXA_Web(基础服务)
- EXA_Web_APIs(依赖EXA_Web)
- EXA_Print_Service(依赖EXA_Web)
反向遍历后遍历顺序会反转,正好先处理两个依赖服务,最后停止基础服务EXA_Web,避免依赖报错。
代码示例
- name: Stop the services win_service: name: "{{ item.0 }}" state: stopped loop: "{{ exa_web_services.items() | reverse }}"
注意事项
- 该方案强依赖字典的插入顺序,如果后续调整字典内服务的排列顺序,需要先确认反转后的遍历顺序依然符合依赖停止逻辑
- 如果后续服务依赖关系变复杂(比如多层级依赖),更稳妥的方案是基于
dependency字段做拓扑排序生成遍历顺序,当前你的简单依赖场景下反向遍历完全可用 - 和添加
force_dependent_serves: true参数的方案相比,反向遍历可以让服务按正常流程退出,不会强制杀掉依赖服务,避免产生异常数据
内容的提问来源于stack exchange,提问作者Chris F
相关产品推荐
相关产品推荐

