Filter 当它';使用jinja groupby筛选器或其他筛选器在Ansible代码中创建字符串或数组
基本上,我有两个列表:Filter 当它';使用jinja groupby筛选器或其他筛选器在Ansible代码中创建字符串或数组,filter,ansible,yaml,Filter,Ansible,Yaml,基本上,我有两个列表: - name: set_fact: list1: - host: '[\"X.XXX.XX.XXX\"]' username: username1 - host: '[\"X.XXX.XX.XXX\"]' username: username2 - host: '[\"X.XXX.XX.XXX\"]' username
- name:
set_fact:
list1:
- host: '[\"X.XXX.XX.XXX\"]'
username: username1
- host: '[\"X.XXX.XX.XXX\"]'
username: username2
- host: '[\"X.XXX.XX.XXX\"]'
username: username3
- host:
- '[\"XX.XXX.XX.XXX\"]'
- '[\"XX.X.X.XXX\"]'
username: username4
- host: '[\"XX.X.X.XXX\"]'
username: username5
- host: '[\"localhost\"]'
username: username6
- host: '[\"XX.XXX.XX.XXX\"]'
username: username7
list2:
- host: 'X.XXX.XX.XXX'
username: username1
- host: 'localhost'
username: username2
- host: 'XX.XXX.XX.XXX'
username: username3
- host: 'localhost'
username: username4
- host: 'XX.X.X.XXX'
username: username5
tags: [diff]
我想做的是区分一个用户名有一个或多个IP的情况。为此,我尝试使用Jinja2 groupby过滤器
比如说,,
{%如果list1.host是字符串%}
...
{%elif list.host是数组%}
...
{%endif%}我得到的唯一提示是,当用户名有一个ip时,ansible代码返回一个字符串或ip,但当有多个ip时,它返回一个包含ip的数组 所以,我的问题是,当它是一个字符串或带有Ansible过滤器的数组时,我无法捕捉并区分大小写。这是我的密码:
- name: Comparison of two lists
debug:
msg: |
{% if list1_host is string %}
It is a string.
{% else %}
It's not a string.
{% endif %}
loop: "{{ list1 | product(list2) | list }}"
when:
- list1_username == list2_username
register: output
tags: [diff]
vars:
list1_host: "{{ (item.0.host | replace('[\\\"','') | replace('\\\"]','')) }}"
list1_username: "{{ item.0.username }}"
list2_host: "{{ item.1.host }}"
list2_username: "{{ item.1.username }}"
length: "{{ item.0.host | length }}"
有人知道吗
谢谢你的帮助