将项目的值与替换字典列表中的字典连接起来
Concatenate value of item with replacing the dictionary in the list of dict
我有几个具有相同键和不同值的字典列表。在循环中,如果键相同但值不同,我想将值与定界符 |
连接起来,并用具有连接值的新字典替换当前字典(用右键选择)。
原始字典列表
mylist:
- name: openssh-server
macros:
- macro: SYSTEMD.NAME.SERVICE.MATCHES
type: text
value: sshd
- name: apache2
macros:
- macro: SYSTEMD.NAME.SERVICE.MATCHES
type: text
value: apache2
- macro: APACHE.STATUS.PORT
type: text
value: 9999
预期的字典连接列表
当字典的键相同但值不同时,mylist 更新为连接值 (apache2|sshd
)。
mylist:
- macro: SYSTEMD.NAME.SERVICE.MATCHES
type: text
value: apache2|sshd
- macro: APACHE.STATUS.PORT
type: text
value: '9999'
问:“遍历 mylist 以检查包是否安装时: ansible_facts.packages 中的 item.name”
问:“此外,type 可以是文本以外的其他值,如果可能,应该从 mylist 中检索。”
问:"用定界符连接值 |
"
答:例如
- set_fact:
my_list_con: "{{ my_list_con|d([]) + [{'macro': item.0,
'type': 'text',
'value': _value}] }}"
loop: "{{ mylist|map(attribute='macros')|flatten|groupby('macro') }}"
vars:
_value: "{{ item.1|map(attribute='value')|unique|sort|join('|') }}"
给予
my_list_con:
- macro: APACHE.STATUS.PORT
type: text
value: '9999'
- macro: SYSTEMD.NAME.SERVICE.MATCHES
type: text
value: apache2|sshd
问:"循环 mylist 检查包是否安装了 when: item.name in ansible_facts.packages"
答:使用selectattr。例如,给定用于测试的包列表
ansible_facts.packages:
- openssh-server
- apache
任务
- set_fact:
my_list_con: "{{ my_list_con|d([]) + [{'macro': item.0,
'type': 'text',
'value': _value}] }}"
loop: "{{ mylist|
selectattr('name', 'in', ansible_facts.packages)|
map(attribute='macros')|flatten|groupby('macro') }}"
vars:
_value: "{{ item.1|map(attribute='value')|unique|sort|join('|') }}"
给予
my_list_con:
- macro: SYSTEMD.NAME.SERVICE.MATCHES
type: text
value: sshd
我有几个具有相同键和不同值的字典列表。在循环中,如果键相同但值不同,我想将值与定界符 |
连接起来,并用具有连接值的新字典替换当前字典(用右键选择)。
原始字典列表
mylist:
- name: openssh-server
macros:
- macro: SYSTEMD.NAME.SERVICE.MATCHES
type: text
value: sshd
- name: apache2
macros:
- macro: SYSTEMD.NAME.SERVICE.MATCHES
type: text
value: apache2
- macro: APACHE.STATUS.PORT
type: text
value: 9999
预期的字典连接列表
当字典的键相同但值不同时,mylist 更新为连接值 (apache2|sshd
)。
mylist:
- macro: SYSTEMD.NAME.SERVICE.MATCHES
type: text
value: apache2|sshd
- macro: APACHE.STATUS.PORT
type: text
value: '9999'
问:“遍历 mylist 以检查包是否安装时: ansible_facts.packages 中的 item.name”
问:“此外,type 可以是文本以外的其他值,如果可能,应该从 mylist 中检索。”
问:"用定界符连接值 |
"
答:例如
- set_fact:
my_list_con: "{{ my_list_con|d([]) + [{'macro': item.0,
'type': 'text',
'value': _value}] }}"
loop: "{{ mylist|map(attribute='macros')|flatten|groupby('macro') }}"
vars:
_value: "{{ item.1|map(attribute='value')|unique|sort|join('|') }}"
给予
my_list_con:
- macro: APACHE.STATUS.PORT
type: text
value: '9999'
- macro: SYSTEMD.NAME.SERVICE.MATCHES
type: text
value: apache2|sshd
问:"循环 mylist 检查包是否安装了 when: item.name in ansible_facts.packages"
答:使用selectattr。例如,给定用于测试的包列表
ansible_facts.packages:
- openssh-server
- apache
任务
- set_fact:
my_list_con: "{{ my_list_con|d([]) + [{'macro': item.0,
'type': 'text',
'value': _value}] }}"
loop: "{{ mylist|
selectattr('name', 'in', ansible_facts.packages)|
map(attribute='macros')|flatten|groupby('macro') }}"
vars:
_value: "{{ item.1|map(attribute='value')|unique|sort|join('|') }}"
给予
my_list_con:
- macro: SYSTEMD.NAME.SERVICE.MATCHES
type: text
value: sshd