次のような異なる名前の辞書があります
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: [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
それで、私が繰り返し処理するリストに基づいて変数名で操作の結果を適切に保存するにはどうすればよいですか?
する必要はありません。 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}}"