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>
]