我有这样的戏
---
- name: List images in ACRs
any_errors_fatal: true
hosts:
- localhost
gather_facts: false
vars:
acrs: ["registry1", "registry2"]
tasks:
- name: list repos
with_items: "{{ acrs }}"
include_role:
name: list_docker_image_repos
vars:
registry_name: "{{ item }}"
list_docker_image_repos
将做set_fact的字典列表。如何将所有事实(每次迭代)附加到列表中?
还是有其他方法可以做到这一点?
谢谢
在每次迭代中,将列表放入字典中。例如,给定角色
shell> cat roles/list_docker_image_repos/tasks/main.yml
- set_fact:
docker_image_repos: "{{ ['repo1', 'repo2', 'repo3']|
product([registry_name])|
map('join', '-')|
list }}"
- set_fact:
my_lists: "{{ my_lists|
combine({registry_name: docker_image_repos}) }}"
剧本
- hosts: localhost
vars:
acrs: ["reg1", "reg2"]
my_lists: {}
tasks:
- name: list repos
include_role:
name: list_docker_image_repos
loop: "{{ acrs }}"
vars:
registry_name: "{{ item }}"
- debug:
var: my_lists
给
"my_lists": {
"reg1": [
"repo1-reg1",
"repo2-reg1",
"repo3-reg1"
],
"reg2": [
"repo1-reg2",
"repo2-reg2",
"repo3-reg2"
]
}
提取列表的列表。例如
- debug:
msg: "{{ acrs|map('extract', my_lists)|list }}"
给
"msg": [
[
"repo1-reg1",
"repo2-reg1",
"repo3-reg1"
],
[
"repo1-reg2",
"repo2-reg2",
"repo3-reg2"
]
]
使用扁平化过滤器可将所有项目放到一个列表中。例如
- debug:
msg: "{{ acrs|map('extract', my_lists)|flatten }}"
给
"msg": [
"repo1-reg1",
"repo2-reg1",
"repo3-reg1",
"repo1-reg2",
"repo2-reg2",
"repo3-reg2"
]