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 }}"
有人知道吗

谢谢你的帮助