在 ansible 列表变量中拒绝

The*_*ROS 5 ansible jinja

我有这样一个变量:

apps:
 - {name: kapitalism, extension: .war}
 - {name: socialism, extension: .war}
 - {name: somethingelse, extension: .ear}
Run Code Online (Sandbox Code Playgroud)

我需要根据它制作另一张,其中不会包括某些列表。我正在尝试这个:

- name: Reject this please
  set_fact:
    apps: "{{ apps | map(attribute='name') | reject('search',item.name) | list }}"
  when: "item.name.find('socialism') != -1"
  with_items: "{{ apps }}"
Run Code Online (Sandbox Code Playgroud)

但在这里我遇到了这样一个问题,扩展参数丢失了,我得到了变量:

apps: [u'kapitalism', u'somethingelse']
Run Code Online (Sandbox Code Playgroud)

如何创建这样的变量:

apps:
 - {name: kapitalism, extension: .war}
 - {name: somethingelse, extension: .ear}
Run Code Online (Sandbox Code Playgroud)

Vla*_*tka 6

下面的剧

- hosts: localhost
  vars:
    apps2: []
    apps:
      - {name: A, extension: .ab}
      - {name: B, extension: .ab}
      - {name: C, extension: .c}
  tasks:
    - set_fact:
        apps2: "{{ apps2 + [item] }}"
      loop: "{{ apps }}"
      when: item.name != 'C'
    - debug:
        var: apps2
Run Code Online (Sandbox Code Playgroud)

给出(删节):

  apps2:
  - extension: .ab
    name: A
  - extension: .ab
    name: B
Run Code Online (Sandbox Code Playgroud)

通过rejectattr可以达到相同的结果

    - set_fact:
        apps2: "{{ apps|rejectattr('name', 'match', '^C$') }}"
Run Code Online (Sandbox Code Playgroud)