我有一个不同名称的字典,例如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
1 回答
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
那么,如何根据我遍历的列表将操作结果正确保存在变量名称中?
不用了 为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}}"
- 1 回答
- 0 关注
- 772 浏览
添加回答
举报
0/150
提交
取消