Outils pour utilisateurs

Outils du site


tech:notes_ansible_boucle_loop

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
tech:notes_ansible_boucle_loop [2025/03/24 15:06] – créée - modification externe 127.0.0.1tech:notes_ansible_boucle_loop [2026/06/07 19:12] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
 +<!DOCTYPE markdown>
 +{{tag>Ansible CA}}
 +
 +# Notes Ansible boucle loop
 +
 +Exemple équivalent à une boucle for imbriqué dans une boucle for, grâce au filtre `product`
 +
 +~~~yaml
 +#! /usr/bin/ansible-playbook
 +
 +- name: play test loop
 +  hosts: localhost
 +
 +  vars:
 +    objects:
 +      - pomme
 +      - banane
 +
 +    emails:
 +      - 'root@localhost'
 +      - 'plop@acme.fr'
 +
 +  tasks:
 +    - name: Exemple boucle
 +      debug:
 +        msg: "{{ object }} - {{ email }}"
 +      vars:
 +        object: "{{ item.0 }}"
 +        email: "{{ item.1 }}"
 +      loop: "{{ objects | product(emails) | list }}"
 +~~~
 +
 +~~~javascript
 +ok: [localhost] => (item=['pomme', 'root@localhost']) => {
 +    "msg": "pomme - root@localhost"
 +}
 +ok: [localhost] => (item=['pomme', 'plop@acme.fr']) => {
 +    "msg": "pomme - plop@acme.fr"
 +}
 +ok: [localhost] => (item=['banane', 'root@localhost']) => {
 +    "msg": "banane - root@localhost"
 +}
 +ok: [localhost] => (item=['banane', 'plop@acme.fr']) => {
 +    "msg": "banane - plop@acme.fr"
 +}
 +~~~
 +
 +
 +
 +
 +## Ansible loop break
 +
 +~~~yaml
 +#!/usr/bin/ansible-playbook
 +---
 +
 +- name: test
 +  hosts: localhost
 +
 +  tasks:
 +    - name: break 1
 +      command: "echo {{ item }}"
 +      register: res
 +      with_sequence: 0-100
 +      when:
 +        - item | int > 3
 +        - not (res.changed | d(false))
 +
 +    - name: break 2
 +      set_fact:
 +        id: "{{ item }}"
 +      register: res2
 +      with_sequence: 0-100
 +      # Because set_fact not make "change"
 +      changed_when: item | int > 3
 +      when:
 +        - not (res2.changed | d(false))
 +      # Ca fonctionne mais 
 +      #  * hélas ce n'est pas un vrai Break car il boucle sur toutes les valeurs
 +      #  * plus problématique encore, ce n'est pas idempotent, car il fait un "Change" à chaque appel
 +
 +    # Nous préférerons utiliser les listes
 +    - name: break 3-A
 +      set_fact:
 +        ids: "{{ ids | d([]) + [ item | int ] }}"
 +      with_sequence: 0-100
 +      when: item | int > 3
 +
 +    - name: break 3-B
 +      debug:
 +        msg: "{{ ids | min }}"
 +~~~
 +
 +
 +
 +
  

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki