2015-04-08 11 views
18

Mam słownik z różnymi nazwami jakzmienne rejestru, w with_items pętli w ansibl playbook

vars: 
    images: 
     - foo 
     - bar 

Nie chcę kasy repozytoriów, a potem budować obrazy Döcker tylko wtedy, gdy źródło nie zmieniło. Ponieważ coraz źródło und budowania wizerunku jest taka sama dla wszystkich przedmiotów z wyjątkiem nazwy utworzonego zadania z with_items: images i próbować zarejestrować wynik z:

register: "{{ item }}" 

a także próbował

register: "src_{{ item }}" 

potem próbowałem następujące Conditon

when: "{{ item }}|changed" 

i

when: "{{ src_item }}|changed" 

to zawsze skutkuje fatal: [piggy] => |changed expects a dictionary

Więc jak mogę poprawnie zapisać wyniki operacji w nazwach zmiennych opartych na liście I iteracyjnego?

Aktualizacja: I wold lubią mieć coś takiego:

- 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 

Odpowiedz

28

Więc jak mogę poprawnie zapisać wyniki operacji w nazwach zmiennych opartych na liście I iteracyjnego?

Nie musisz. Zmienne zarejestrowane dla zadania o numerze with_items mają inny format, zawierają wyniki dla wszystkich elementów.

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

Jak odnoszą się do nazw obrazów z wyników? –

+0

@KenJ ostatnie dwa zadania pokazują, że. Jeśli chodziło ci o coś innego, to rozwinę to. Uruchom go i zobacz wynik. – Kashyap