with_items item loops variables ansible

loops - Registre variables en el bucle with_items en el libro de jugadas de Ansible



ansible with_items (1)

Tengo un diccionario con diferentes nombres como

vars: images: - foo - bar

No, quiero retirar repositorios y luego construir imágenes acoplables solo cuando la fuente ha cambiado. Dado que obtener la fuente y construir la imagen es la misma para todos los elementos, excepto el nombre, creé las tareas con with_items: images e intento registrar el resultado con:

register: "{{ item }}"

y también probé

register: "src_{{ item }}"

Luego probé la siguiente condición

when: "{{ item }}|changed"

y

when: "{{ src_item }}|changed"

Esto siempre resulta fatal: [piggy] => |changed expects a dictionary

Entonces, ¿cómo puedo guardar correctamente los resultados de las operaciones en nombres de variables basados ​​en la lista que repito?

Actualización: me gustaría tener algo así:

- hosts: all vars: images: - foo - bar tasks: - name: get src git: repo: [email protected]/repo.git dest: /tmp/repo register: "{{ item }}_src" with_items: images - name: build image shell: "docker build -t repo ." args: chdir: /tmp/repo when: "{{ item }}_src"|changed register: "{{ item }}_image" with_items: images - name: push image shell: "docker push repo" when: "{{ item }}_image"|changed with_items: images


Entonces, ¿cómo puedo guardar correctamente los resultados de las operaciones en nombres de variables basados ​​en la lista que repito?

No necesitas hacerlo. Las variables registradas para una tarea que tiene with_items tienen un formato diferente, contienen resultados para todos los elementos.

- hosts: localhost gather_facts: no vars: images: - foo - bar tasks: - shell: "echo result-{{item}}" register: "r" with_items: "{{ images }}" - debug: var=r - debug: msg="item.item={{item.item}}, item.stdout={{item.stdout}}, item.changed={{item.changed}}" with_items: "{{r.results}}" - debug: msg="Gets printed only if this item changed - {{item}}" when: item.changed == true with_items: "{{r.results}}"