基本上,我有两个列表:
- 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 过滤器。
例如,
{% if list1.host 是字符串%}
...
{% elif list.host 是数组%}
...
{% endif %}
我唯一的提示是,当一个用户名有一个 ip 时,ansible 代码返回一个字符串或 ip,但是当多个 ips 时,它返回一个包含 ips 的数组。
所以,我的问题是当它是带有 Ansible 过滤器的字符串或数组时,我无法捕捉和区分大小写。这是我的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 }}"
有人知道吗?
感谢您的帮助。