Registre as variables ​​no loop with_items no guia Ansible

Eu tenho um dictionary com nomes diferentes como

vars: images: - foo - bar 

Não, quero fazer check-out de repositorys e depois criar imagens do docker apenas quando a origem for alterada. Como obter a fonte e construir a imagem é a mesma para todos os itens, exceto o nome, criei as tarefas com with_items: images e tente registrar o resultado com:

 register: "{{ item }}" 

e também tentei

 register: "src_{{ item }}" 

Então eu tentei o seguinte conditon

 when: "{{ item }}|changed" 

e

 when: "{{ src_item }}|changed" 

Isso sempre resulta em fatal: [piggy] => |changed expects a dictionary

Então, como posso salvar adequadamente os resultados das operações em nomes de variables ​​com base na lista que eu faço?

Atualização: Eu gostaria de ter algo assim:

 - hosts: all vars: images: - foo - bar tasks: - name: get src git: repo: git@foobar.com/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 

Então, como posso salvar adequadamente os resultados das operações em nomes de variables ​​com base na lista que eu faço?

Você não precisa. Variáveis ​​registradas para uma tarefa que possui with_items têm formato diferente, elas contêm resultados para todos os itens.

 - 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}}"