Dictionary 用Ansible中的子元素遍历字典

Dictionary 用Ansible中的子元素遍历字典,dictionary,ansible,Dictionary,Ansible,我必须根据字典创建一个列表。 要从字典中获取元素,我需要加入“服务器”+“域”。问题是我有3个不同的领域。 目前,我正在重复代码,以便能够使用3个不同的域 - name: "Get server instances {{ ansible_fqdn }}" set_fact: app_ps_mon_list: "{{ app_ps_mon_list | default ([]) + [ app_instance ] }}" vars:

我必须根据字典创建一个列表。
要从字典中获取元素,我需要加入“服务器”+“域”。问题是我有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"}}'
-name:“获取服务器实例{{ansible\u fqdn}”
设定事实:
app_ps_mon_list:{{app_ps_mon_list}默认值([])+[app_实例]}”
变量:
应用程序实例:|
[爪哇,]
java关键1-
*ARGS{{item.value.INSTANCE_NAME.split(“/”[1]}
使用以下命令:“{{server_实例[ansible_主机名+”“]}”
当:{{server\u instances[ansible\u hostname+“”]已定义且item.key!=“server\u IMPACT”}
-名称:“获取服务器实例{{ansible_fqdn}”
设定事实:
app_ps_mon_list:{{app_ps_mon_list}默认值([])+[app_实例]}”
变量:
应用程序实例:|
[爪哇,]
java关键1-
*ARGS{{item.value.INSTANCE_NAME.split(“/”[1]}
使用以下命令:“{{server_实例[ansible_主机名+”“]}”
当:{{server\u instances[ansible\u hostname+“”]已定义且item.key!=“server\u IMPACT”}
-名称:“获取服务器实例{{ansible_fqdn}”
设定事实:
app_ps_mon_list:{{app_ps_mon_list}默认值([])+[app_实例]}”
变量:
应用程序实例:|
[爪哇,]
java关键1-
*ARGS{{item.value.INSTANCE_NAME.split(“/”[1]}
使用以下命令:“{{server_实例[ansible_主机名+”“]}”
当:{{server\u instances[ansible\u hostname+“”]已定义且item.key!=“server\u IMPACT”}
我一直试图对_子元素进行同样的操作,但没有成功。我还尝试使用“ansible_fqdn”,但fqdn域通常与实际域不匹配(我知道这很混乱)

有没有什么方法可以避免重复代码

更新

playbook的想法是从我用作主机的服务器(ansible_hostname varaible)获取解决方案。
获得解决方案后,使用实例名称中的一些信息创建一个列表

这是字典的通用版本:

{
  "<server_name><domain>": {
    "<solution_id>": {
      "INSTANCE_NAME": "",
      "SOLUTION_CATEGORY": "",
      "SOLUTION_NAME": ""
    },
    "<solution_id>": {
      "INSTANCE_NAME": "",
      "SOLUTION_CATEGORY": "",
      "SOLUTION_NAME": ""
    },
    SERVER_IMPACT: "",
  ...,

}
{
"": {
"": {
“实例名称”:“,
“解决方案类别”:“,
“解决方案名称”:”
},
"": {
“实例名称”:“,
“解决方案类别”:“,
“解决方案名称”:”
},
服务器\u影响:“”,
...,
}
列表应该是这样的(它是一个多行字符串变量,虽然很哑但很有用):

[
[爪哇]
java关键1-
*ARGS
], 
[
[爪哇]
java关键1-
*ARGS
]

你能给我们举一个你开始使用的字典(输入)和你想要的列表(输出)的例子吗?我已经添加了一些通用信息、字典结构和列表。你能给我们举一个你开始使用的字典(输入)和你想要的列表(输出)的例子吗?我添加了一些通用信息、词典结构和列表
[
  [Java]
  java    critical 1-
  *ARGS <iINSTANCE_NAME info>
], 
[
  [Java]
  java    critical 1-
  *ARGS  <iINSTANCE_NAME info>
]