如何解决Ansible 添加多个列表变量形成一个主列表
我的剧本中有多个列表,app1
、app2
、app3
、...、appN
。
如何将它们合并到一个名为 app.
的列表中
我有 N
值。我需要的是这个
app = app1 + app2 + ... + appN
我使用的是 Ansible 版本 2.9.18。
解决方法
我不知道您如何获取不同 appN
值的值,但是如果您想将 flat
多个列表合并为一个,您可以使用 +
操作员。
以下是一个关于如何使用它的示例:
- hosts: localhost
gather_facts: no
vars:
app1: [1,1,1]
app2: [2,2,2]
app3: [3,3,3]
tasks:
- set_fact:
app: |
{{
(app | default([]))
+
item
}}
loop:
- "{{ app1 }}"
- "{{ app2 }}"
- "{{ app3 }}"
- debug:
var: app
我使用 default
过滤器来处理 app
变量最初未定义的事实。您可以通过多种方式应用此运算符,以便根据您使用的任何内容进行调整。
为了缩小 @guzmonne's answer 和您的要求之间的差距,您可以使用一对 loop
with range
和 vars
查找或字典。
给出,假设 N
被定义为一个整数:
- set_fact:
app: "{{ app | default([]) + vars['app' ~ item] }}"
loop: "{{ range(1,N+1) | list }}"
给定剧本:
- hosts: localhost
gather_facts: no
vars:
N: 4
app1:
- a
- b
app2:
- c
- d
app3:
- e
- f
app4:
- g
- h
tasks:
- set_fact:
app: "{{ app | default([]) + vars['app' ~ item] }}"
loop: "{{ range(1,N+1) | list }}"
- debug:
var: app
总结如下:
PLAY [localhost] **************************************************************************************************
TASK [set_fact] ***************************************************************************************************
ok: [localhost] => (item=1)
ok: [localhost] => (item=2)
ok: [localhost] => (item=3)
ok: [localhost] => (item=4)
TASK [debug] ******************************************************************************************************
ok: [localhost] =>
app:
- a
- b
- c
- d
- e
- f
- g
- h
PLAY RECAP ********************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。