dictionary - 在 Ansible 中遍历包含子元素的字典
问题描述
我必须根据字典创建一个列表。
要从字典中获取元素,我需要加入“服务器”+“域”。问题是我有 3 个不同的域。目前,我正在重复代码以便能够使用 3 个不同的域。
- name: "Get server instances {{ ansible_fqdn }}"
set_fact:
app_ps_mon_list: "{{ app_ps_mon_list | default ([]) + [ app_instance ] }}"
vars:
app_instance: |
[Java,<event_type>]
java critical 1-
*ARGS {{item.value.INSTANCE_NAME.split("/")[1]}}
with_dict: '{{ server_instances[ansible_hostname + "<DOMAIN1>"] }}'
when: '{{server_instances[ansible_hostname + "<DOMAIN1>"] is defined and item.key != "SERVER_IMPACT"}}'
- name: "Get server instances {{ ansible_fqdn }}"
set_fact:
app_ps_mon_list: "{{ app_ps_mon_list | default ([]) + [ app_instance ] }}"
vars:
app_instance: |
[Java,<event_type>]
java critical 1-
*ARGS {{item.value.INSTANCE_NAME.split("/")[1]}}
with_dict: '{{ server_instances[ansible_hostname + "<DOMAIN2>"] }}'
when: '{{server_instances[ansible_hostname + "<DOMAIN2>"] is defined and item.key != "SERVER_IMPACT"}}'
- name: "Get server instances {{ ansible_fqdn }}"
set_fact:
app_ps_mon_list: "{{ app_ps_mon_list | default ([]) + [ app_instance ] }}"
vars:
app_instance: |
[Java,<event_type>]
java critical 1-
*ARGS {{item.value.INSTANCE_NAME.split("/")[1]}}
with_dict: '{{ server_instances[ansible_hostname + "<DOMAIN3>"] }}'
when: '{{server_instances[ansible_hostname + "<DOMAIN3>"] is defined and item.key != "SERVER_IMPACT"}}'
我一直在尝试用_subelements 做同样的事情,但没有成功。我也尝试使用“ansible_fqdn”,但 fqdn 域通常与实际域不匹配(我知道它一团糟)。
有什么解决方法可以避免重复代码吗?
更新
该剧本的想法是从我用作主机的服务器(ansible_hostname 变量)获取解决方案。
获得解决方案后,使用 INSTANCE_NAME 中的一些信息创建一个列表
这是字典的通用版本:
{
"<server_name><domain>": {
"<solution_id>": {
"INSTANCE_NAME": "",
"SOLUTION_CATEGORY": "",
"SOLUTION_NAME": ""
},
"<solution_id>": {
"INSTANCE_NAME": "",
"SOLUTION_CATEGORY": "",
"SOLUTION_NAME": ""
},
SERVER_IMPACT: "",
...,
}
这就是列表的样子(它是一个多行字符串变量,愚蠢但有用):
[
[Java]
java critical 1-
*ARGS <iINSTANCE_NAME info>
],
[
[Java]
java critical 1-
*ARGS <iINSTANCE_NAME info>
]
解决方案
推荐阅读
- javascript - 如何使用 Google API Node.js 客户端更新 Google Drive 上的现有文件?
- java - 如何更改我的代码以读取所有类型的分隔文件?它目前只读取 csv 文件,然后比较它们
- javascript - 你可以一起使用html模板标签和(ES)模板文字吗?
- google-apps-script - 如何确保 onEdit 函数不会误触发
- java - 如果方法采用原始类型,如何将字符串转换为 setter 函数?
- python - 是否可以将熊猫系列附加到列表中
- angular - 从 Angular 中的表中删除一个或多个选定数据
- java - 如何在 Java 中实现非抢占式优先级调度?
- javascript - 使用 Input 隐藏和显示特定类名的 div 并且仅显示一个类
- sql-server - SQL Server - DB_LINK 问题的 EXEC()