Outils pour utilisateurs

Outils du site


tech:notes_ansible_boucle_loop

Ceci est une ancienne révision du document !


Notes Ansible boucle loop

Exemple équivalent à une boucle for imbriqué dans une boucle for, grâce au filtre product

-
#! /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 }}"
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

#!/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 }}"
tech/notes_ansible_boucle_loop.1742825205.txt.gz · Dernière modification : de 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki