tech:notes_ansible_map_select_reject
Ceci est une ancienne révision du document !
Table des matières
Notes Ansible map select reject
Map reduce filter avec Ansible
A voir :
Liste des filtres Jinja2
Développer ses propres filtres :
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
