将列表变量附加到 Ansible 中的另一个列表

Append list variable to another list in Ansible

是否可以在 ansible 中将变量列表附加到静态列表?

我可以将整个列表定义为一个变量:

my_list:
  - 1
  - 2
  - 3

然后在剧本中使用它作为

something: {{my_list}}

但我似乎找不到如何执行此操作(伪代码):

list_to_append: 
  - 3
  - 4

然后在剧本中:

something:
  - 1
  - 2
  - {{append: list_to_append}}

如果这实际上是不可能的,您对我的用例有什么建议?

我在参数中有一个项目列表,但其中一些是 optional 并且应该可以使用变量进行修改。

换句话说:我有 default values + optional values 可以通过变量添加也可以不可以。

optional values 不是事先知道的,我可以添加 1、2 或 100 个,所以它们不是静态的。

我基本上有一个默认的静态列表 ++ 要附加的可配置变量列表。

编辑: 我找到了这个,但它仅适用于 with_items,我需要在普通参数中使用它:

  with_flattened:
   - "{{list1}}"
   - "{{list2}}"

如果你真的想附加到内容,你需要使用 set_fact 模块。但如果你只想使用合并列表,就这么简单:

{{ list1 + list2 }}

set_fact 看起来像这样:

- set_fact:
    list_merged: "{{ list1 + list2 }}"

注意:如果您需要对串联列表执行其他操作,请确保将它们分组如下:

- set_fact:
    list_merged: "{{ (list1 + list2) | ... }}"

以下对 Ansible 2.1.2.0 有用:

- name: Define list of mappings
  set_facts:
    something:
      - name: bla
        mode: 1

- name: Append list with additional mapping
  set_facts:
    something: "{{ something + [{'name': 'blabla', 'mode': 1}] }}"

您也可以从变量附加项目。

- set_fact:
    files: '{{ files + more }}'
  vars:
    more:
      - '{{playbook_dir}}/remote.sh'
      - '{{playbook_dir}}/config.yml'