web-dev-qa-db-ja.com

ansibleリスト変数で拒否

私はそのような変数を持っています:

apps:
 - {name: kapitalism, extension: .war}
 - {name: socialism, extension: .war}
 - {name: somethingelse, extension: .ear}

そして、それに基づいて別のリストを作成する必要があります。リストの一部は含まれません。私はこれを試しています:

- 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 }}"

しかし、ここでは拡張パラメーターが失われ、変数が取得されるという問題が発生します。

apps: [u'kapitalism', u'somethingelse']

このような変数を作成する方法:

apps:
 - {name: kapitalism, extension: .war}
 - {name: somethingelse, extension: .ear}

3
TheDESTROS

下の遊び

  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

与える(要約):

"apps2": [
    {
        "extension": ".ab", 
        "name": "A"
    }, 
    {
        "extension": ".ab", 
        "name": "B"
    }
]

rejectattr を使用しても同じ結果が得られます(バージョン2.7の新機能)。

- set_fact:
    apps2: "{{ apps|rejectattr('name', 'match', 'C')|list  }}"
3
Vladimir Botka