Outils pour utilisateurs

Outils du site


tech:notes_ansible_map_select_reject

Ceci est une ancienne révision du document !


Notes Ansible map select reject

select (filter)

select l'équivalent Ansible / Jinja à filter de Python

Exemple : Enlever les éléments vides d'une liste

# 
liste: {{ liste1 | difference(['']) }}
 
# ou
liste: {{ liste1 | select | list }}
 
# Ce qui est équivalent à 
liste: {{ liste1 | select('!=', '') | list }}
 
# et à 
liste: {{ liste1 | reject('==', '') | list }}

Faire un grep

- name: assert ansible-lint duplicate dict key
  assert:
    that:
      - ansible_lint_ref.rc != 1
    msg: "{{ ansible_lint_ref.stderr_lines | select('regex', 'duplicate' ) | list }}"
    # Show only lines with "duplicate" keywork, because error msg is too much verbose

Nettoyer une liste des éléments undef

msg: '{{ foo | select("defined") }}'

Voir aussi

  • select('match', 'plop')
  • selectattr, rejectattr

map

Émuler any et all

- hosts: localhost
  tasks:
   - assert:
       that:
         - mixed | any
         - not (mixed | all)
         - all_true | any
         - all_true | all
         - not (all_false | any)
         - not (all_false | all)
     vars:
       mixed:
         - false
         - true
         - false
       all_true:
         - true
         - true
         - true
       all_false:
         - false
         - false
         - false

Sur ma version d'Ansible je n'ai pas any ni all Solution :

vars:
  any: my_list | map('bool') | max
  all: my_list | map('bool') | min

Faire un sed

      - name: Copy a glob of files based on a list of groups
        copy:
          src: "{{ item }}"
          dest: "/tmp/{{ item }}"
        loop: '{{ q("fileglob", *globlist) }}'
        vars:
          globlist: '{{ mygroups | map("regex_replace", "^(.*)$", "files/\1/*.conf") | list }}'

map attribute

# La ligne ci-dessous :
mounts: "{{ ansible_mounts | map(attribute='mount') |list }}"
# équivaut à :
mounts: "{{ ansible_mounts | json_query('[*].mount') }}"

Autres

A tester

- name: Convert
  shell: python -c "print [x for b in {{ servers }}['servers']['results'] for x in b['tagged_instances']]"
  register: my_list_of_dicts
tech/notes_ansible_map_select_reject.1742825205.txt.gz · Dernière modification : de 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki