ansible - 在 Ansible 中,可以反向循环遍历字典吗?
问题描述
Ansible v2.11
假设我有一本我想启动或停止的服务字典,就像这样。您注意到最后 2 个服务依赖于第一个服务
exa_web_services:
EXA_Web:
description: "Exa Web service"
app_dir: "{{ exa_web_dir }}"
app_cmd: "{{ node_exe }}"
app_cmd_params: "app.js EXA_Web env={{ node_environment }} port=8080 ssl_port=8443"
dependency: "EXA_Redis_Cache"
EXA_Web_APIs:
description: "Exa Web APIs service"
app_dir: "{{ exa_web_dir }}"
app_cmd: "{{ node_exe }}"
app_cmd_params: "app.js EXA_Web_APIs env={{ node_environment }} port=8091 mode=api"
dependency: "EXA_Web"
EXA_Print_Service:
description: "Exa Print service"
app_dir: "{{ exa_web_dir }}"
app_cmd: "{{ node_exe }}"
app_cmd_params: "app_service.js SERVICE_NAME=PRINTSERVICE"
dependency: "EXA_Web"
启动我所做的服务,以正确的顺序启动它们
- name: Start the services
win_service:
name: "{{ item.0 }}"
state: started
loop: "{{ exa_web_services.items() }}"
但是,如果我尝试类似地停止服务,它会失败,因为它首先停止第一个服务EXA_Web
,但它有依赖关系,最后两个服务。
- name: Start the services
win_service:
name: "{{ item.0 }}"
state: stopped
loop: "{{ exa_web_services.items() }}"
那么我怎样才能反向循环字典以便我首先停止最后两个服务EXA_Web
呢?是否可以?我知道我可以添加force_dependent_serves: true
属性并完成它。
解决方案
我们可以实现这一点的一种方法是使用dict2items
过滤器,然后使用reverse
它。
像这样的东西:
- name: stop the services
win_service:
name: "{{ item.key }}"
state: "stopped"
loop: "{{ exa_web_services | dict2items | reverse | list }}"
推荐阅读
- ubuntu - 詹金斯连续显示“詹金斯准备工作时请稍候”,我需要做什么?
- hashicorp-vault - 在 docker 中运行 vault 时无法访问 vault ui:找不到 404 页面
- python - 访问路径包含编码字符(如空格)的文件
- python - 算法计算 2^n 的理论与实际时间复杂度
- c# - 没有构造函数的本地化依赖注入
- reactjs - 如何使用 React 测试库通过包含 html 标签的文本字符串进行查询?
- amazon-web-services - 每当将 0 kb 文件上传到 s3 时,是否可以通过 SNS 或 SQS 发送电子邮件通知?
- java - 将 Duplicate Key 的所有值存储在 Map 中
- javascript - Ionic show numeric keyboard in ion-searchbar but when a value is selected show name alongside number
- javascript - 如何将对象数组文件访问到反应组件中?