Reject in ansible list variable

5,039

The play below

- 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

gives (abridged):

  apps2:
  - extension: .ab
    name: A
  - extension: .ab
    name: B

The same result can be achieved by rejectattr

    - set_fact:
        apps2: "{{ apps|rejectattr('name', 'match', '^C$') }}"
Share:
5,039

Related videos on Youtube

TheDESTROS
Author by

TheDESTROS

Updated on September 18, 2022

Comments

  • TheDESTROS
    TheDESTROS over 1 year

    I have such a variable:

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

    And I need to make another one based on it, which will not include some of the list. I'm trying this:

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

    But here I get such a problem that the extension parameter is lost and I get the variable:

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

    How to make a variable like this:

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

    ?

  • TheDESTROS
    TheDESTROS almost 5 years
    ty!!! did the first way - everything works.