List Ansible构建动态列表

List Ansible构建动态列表,list,ansible,List,Ansible,我正在努力使用语法动态地构建和添加到列表中。我想在一个ansible行中完成它,而不必使用jinja2模板。我一直在胡闹,但下面是我开始的地方。错误就在设定事实的那一行 - name: Assign data to the correct list based on the meta value. set_fact: "{{ next_reference.list_name }}": "{{ next_reference.list_name|defaul

我正在努力使用语法动态地构建和添加到列表中。我想在一个ansible行中完成它,而不必使用jinja2模板。我一直在胡闹,但下面是我开始的地方。错误就在设定事实的那一行

- name: Assign data to the correct list based on the meta value.
  set_fact:
    "{{ next_reference.list_name }}": "{{ next_reference.list_name|default([]) + [ input_data ] }}"
  loop: "{{ reference_list }}"
  loop_control:
    loop_var: next_reference
  when: input_data.meta == next_reference.meta

reference_list:
  - meta: "test1"
    list_name: "test1_list"
  - meta: "test2"
    list_name: "test2_list"
  - meta: "test3"
    list_name: "test3_list"

input_data_list:
  - meta: "anp"
    value1: "one"
    value2: "two"

感谢您的帮助,在此期间,您可能不得不选择jinja2路线。

如果没有Jinja,则无法在Ansible中间接声明或修改变量。相反,一个合适的数据结构可以达到这个目的,例如

t:
t1:{{test1_list}默认([])}+{{input_data}
t2:{{test2_list}默认([])}+{{input_data}
t3:{{test3_list}默认值([])}+{{input_data}}”

谢谢您的回复。这个问题提醒我们,jinja2和ansible是简单的工具,而不是编程语言,所以关键是要简单地思考

如果要更改字典列表中的数据。最好的方法是浏览当前列表,从要创建新词典的词典中取出数据,将新数据放入词典中或对其进行修改。把这本新词典放在一张单子上。 使用rejectattr从当前列表中删除词典。使用简单的jinja2模板重新组合新列表和旧列表