在Ansible playbook中的with_items循环中注册变量

我有一本不同名字的字典


vars:

    images:

      - foo

      - bar

不,我想检查存储库,然后仅在源已更改时才构建docker镜像。由于获取源和构建图像的所有项目都是相同的,除了我创建任务的名称,with_items: images 并尝试使用以下内容注册结果:


register: "{{ item }}"

并尝试过


register: "src_{{ item }}"

然后我尝试了以下条件


when: "{{ item }}|changed"


when: "{{ src_item }}|changed"

这总是导致 fatal: [piggy] => |changed expects a dictionary


那么如何根据迭代的列表正确保存变量名中的操作结果呢?


更新:我希望有类似的东西:


- 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


PIPIONE
浏览 1865回答 2
2回答

慕盖茨4494581

那么如何根据迭代的列表正确保存变量名中的操作结果呢?你不需要。为with_items具有不同格式的任务注册的变量,它们包含所有项目的结果。- 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}}"

白板的微信

最后两个任务表明。如果你的意思是plz详细说明的话。运行它,看看输出
打开App,查看更多内容
随时随地看视频慕课网APP