jinja2 selectattr() 中键的正则表达式匹配
Regex match for key in jinja2 selectattr()
给定数据:
"serverName", [
serverData: [
{
"internal_ip": "10.1.1.100",
"external_ip": "172.16.1.10",
"name": "dns-1"
},
],
]
这会在 internal_ip
匹配 equalto
时提取 name
值 dns-1
。到目前为止,还不错。
- debug:
msg: "{{ mydict | selectattr('internal_ip', 'equalto', '10.1.1.100') |
map(attribute='name') | list }}"
在实际问题中,我不知道 知道我正在搜索的IP 地址属于哪种类型的*_ip。它可能在 internal_ip
之下,它可能在 external_ip
之下,据我所知,可能还有更多选项,唯一会一直存在的是我正在搜索的实际 IP 地址对于:“10.1.1.100”。
所以我需要像这样进行正则表达式匹配:
- debug:
msg: "{{ mydict | selectattr('^.*$', 'equalto', '10.1.1.100') |
map(attribute='name') | list }}"
我不确定这是否可行,但这似乎是摆脱困境的方法之一。
例如剧本
shell> cat playbook.yml
- hosts: localhost
vars:
mylist:
- {internal_ip: 10.1.1.101, external_ip: 172.16.1.10, name: dns-1}
- {internal_ip: 10.1.1.102, external_ip: 172.16.1.10, name: dns-2}
- {internal_ip: 10.1.1.103, external_ip: 172.16.1.10, name: dns-3}
tasks:
- set_fact:
sel: "{{ sel|default([]) + [item.name] }}"
loop: "{{ mylist }}"
when: sel_ip|default('') in item.values()|list
- debug:
var: sel
给予
shell> ansible-playbook playbook.yml -e sel_ip=172.16.1.10
...
sel:
- dns-1
- dns-2
- dns-3
shell> ansible-playbook playbook.yml -e sel_ip=10.1.1.103
...
sel:
- dns-3
给定数据:
"serverName", [
serverData: [
{
"internal_ip": "10.1.1.100",
"external_ip": "172.16.1.10",
"name": "dns-1"
},
],
]
这会在 internal_ip
匹配 equalto
时提取 name
值 dns-1
。到目前为止,还不错。
- debug:
msg: "{{ mydict | selectattr('internal_ip', 'equalto', '10.1.1.100') |
map(attribute='name') | list }}"
在实际问题中,我不知道 知道我正在搜索的IP 地址属于哪种类型的*_ip。它可能在 internal_ip
之下,它可能在 external_ip
之下,据我所知,可能还有更多选项,唯一会一直存在的是我正在搜索的实际 IP 地址对于:“10.1.1.100”。
所以我需要像这样进行正则表达式匹配:
- debug:
msg: "{{ mydict | selectattr('^.*$', 'equalto', '10.1.1.100') |
map(attribute='name') | list }}"
我不确定这是否可行,但这似乎是摆脱困境的方法之一。
例如剧本
shell> cat playbook.yml
- hosts: localhost
vars:
mylist:
- {internal_ip: 10.1.1.101, external_ip: 172.16.1.10, name: dns-1}
- {internal_ip: 10.1.1.102, external_ip: 172.16.1.10, name: dns-2}
- {internal_ip: 10.1.1.103, external_ip: 172.16.1.10, name: dns-3}
tasks:
- set_fact:
sel: "{{ sel|default([]) + [item.name] }}"
loop: "{{ mylist }}"
when: sel_ip|default('') in item.values()|list
- debug:
var: sel
给予
shell> ansible-playbook playbook.yml -e sel_ip=172.16.1.10
...
sel:
- dns-1
- dns-2
- dns-3
shell> ansible-playbook playbook.yml -e sel_ip=10.1.1.103
...
sel:
- dns-3