说我开始使用Docker Container,并有一个应用列表,包括端口信息,如下所示:
my_apps:
- name: App1
ports:
- "2000:2000"
- name: App2
ports:
- "2001:2001"
在以下任务中,是否有一种简单的方法可以将所有应用程序的上述变量中的所有端口提取到下面的ports选项中?
- My Docker Container
docker_container:
name: ubunty
image: ubuntu
ports:
- "2000:2000"
- "2001:2001"
目前,我有另一个列表用于所有端口,但为了添加另一个端口,我必须将它添加到两个列表,这变得很麻烦。希望会有另一种方式。
答案 0 :(得分:1)
您可以执行以下操作:
- vars:
list_of_ports:
- 2000:2000
- 2001:2001
...然后在你的游戏中:
- name: App1
ports: {{ list_of_ports }}
- name: App2
ports: {{ list_of_ports }}
上述内容在语法上可能不完全正确,但它足够接近你的想法。
答案 1 :(得分:1)
您可以使用set_fact
创建新变量并为每个变量添加端口值。然后用它来调用你的容器。
tasks:
- name: Initialize ports
set_fact: ports=[]
- name: Collect ports from apps
set_fact: ports="{{ports}} + {{item.ports}}"
with_items: "{{ my_apps }}"
然后使用ports变量
调用容器 - My Docker Container
docker_container:
name: ubunty
image: ubuntu
ports: "{{ ports }}"
答案 2 :(得分:1)
以下是使用jinja过滤器的解决方案,可将您的应用列表缩减为端口列表:
my_apps | map(attribute='ports') | list
或在你的任务中:
- My Docker Container
docker_container:
name: ubunty
image: ubuntu
ports: "{{ my_apps | map(attribute='ports') | list }}"