我有这个Ansible任务:
在任务迭代的最后,我想做这样的事情:
output = output + [template]
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Ansible中,要实现您所描述的需求,即在迭代过程中收集所有模板对象并最终输出一个包含所有这些对象的数组,可以使用set_fact
模块结合 Jinja2 模板语言的特性来完成。实际上,您已经很接近正确的解决方案了。下面是如何调整您的任务以达到目的:
- name: Build array of Templates
set_fact:
output: "{{ output | default([]) + [template] }}"
vars:
template:
name: "{{ item.name }}"
element1: "{{ item.element1 }}"
element2: "{{ item.element2 }}"
with_items: "{{ list_of_objects }}"
这里的关键点在于: 1. 初始化 output
变量为一个空列表([]
),这是通过 default
过滤器完成的,确保首次迭代时 output
存在且为空。 2. 使用 +
运算符将当前迭代生成的 template
对象添加到 output
列表中。
这样,在循环结束后,output
变量将包含所有迭代过程中生成的模板对象组成的数组。您可以在后续的任务中直接使用这个 output
变量进行操作或输出。