2015-04-08 21 views
18

Tôi đã có một cuốn từ điển với tên gọi khác nhau nhưbiến ký trong vòng lặp with_items trong Ansible playbook

vars: 
    images: 
     - foo 
     - bar 

Không, tôi muốn kiểm kho và sau đó xây dựng hình ảnh Docker chỉ khi nguồn đã thay đổi. Kể từ khi nhận được nguồn und xây dựng hình ảnh là như nhau cho tất cả các mục trừ tên tôi tạo ra các nhiệm vụ với with_items: images và cố gắng đăng ký kết quả với:

register: "{{ item }}" 

và cũng đã cố gắng

register: "src_{{ item }}" 

Sau đó, tôi đã thử các conditon sau đây

when: "{{ item }}|changed" 

when: "{{ src_item }}|changed" 

này luôn dẫn đến fatal: [piggy] => |changed expects a dictionary

Vậy làm thế nào tôi có thể đúng cách lưu các kết quả của các hoạt động trong tên biến dựa trên danh sách tôi lặp kết thúc?

Cập nhật: Tôi wold muốn có một cái gì đó như thế:

- 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 

Trả lời

28

Vậy làm thế nào tôi có thể đúng cách lưu các kết quả của các hoạt động trong tên biến dựa trên danh sách tôi lặp kết thúc?

Bạn không cần. Các biến được đăng ký cho một tác vụ có with_items có định dạng khác nhau, chúng chứa kết quả cho tất cả các mục.

- 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

Bạn tham khảo tên hình ảnh từ kết quả như thế nào? –

+0

@KenJ hai nhiệm vụ cuối cùng cho thấy điều đó. Nếu bạn có nghĩa là một cái gì đó khác plz xây dựng. Chạy nó và xem đầu ra. – Kashyap

Các vấn đề liên quan