开发者社区 问答 正文

Ansible在每次迭代中构建对象数组

我有这个Ansible任务:

  • name: Build array of Templates set_fact: template:
    • name: "{{item.name}}" element1: "{{item.element1}}" element2: "{{item.element2}}" with_items: "{{list_of_objects}}" 基本上,我每次迭代时都不知道如何将一次迭代生成的模板对象添加到模板数组中。

在任务迭代的最后,我想做这样的事情:

output = output + [template]

展开
收起
被纵养的懒猫 2019-09-23 17:22:43 427 分享 版权
阿里云 AI 助理回答

在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 变量进行操作或输出。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答