如何将多个任务中的值保存到列表变量中?

时间:2019-05-13 20:36:51

标签: ansible ansible-2.x

我有一本剧本,可以执行多个任务。如果满足WHEN条件,则可以执行每个任务。我想将一些数据保存到列表中,以便以后在过程中使用。

这里是一个过于简化的示例来说明我的需求:

- Set GlobalVar = []

- task A
  when task_A_enabled
  register custom_value_A into GlobalVar

- task B
  when task_B_enabled
  register custom_value_B into GlobalVar

- task C
  do something with GlobalVar

我希望它足够清楚,可以帮助我弄清楚该如何做。谢谢。

2 个答案:

答案 0 :(得分:2)

一种选择是使用block

例如下面的播放

- hosts: localhost
  gather_facts: no
  vars:
    GlobalVar: []
    task_a: true
    task_b: false
  tasks:
    - name: task A
      block:
        - debug:
            msg: Task A is enabled
        - set_fact:
            GlobalVar: "{{ GlobalVar + [ 'A' ] }}"
      when: task_a
    - name: task B
      block:
        - debug:
            msg: Task B is enabled
        - set_fact:
            GlobalVar: "{{ GlobalVar + [ 'B' ] }}"
      when: task_b
    - name: task C
      debug:
        var: GlobalVar

给予(节略):

ok: [localhost] => {
    "msg": "Task A is enabled"
}
...
ok: [localhost] => {
    "GlobalVar": [
        "A"
    ]
}

答案 1 :(得分:2)

您可以使用模块set_fact进行变量分配,并使用blocks对任务和变量分配步骤进行分组,以便可以一次检查条件:

---
  - hosts: "all"
    vars:
        GlobalVar: []
    tasks:
      - block:
         - set_fact:
              GlobalVar: "{{ GlobalVar + [1, 2] }}"
         - debug:
              msg: "{{GlobalVar}}"
        when: true
      - block:
         - set_fact:
              GlobalVar: "{{ GlobalVar + [3, 4] }}"
         - debug:
              msg: "{{GlobalVar}}"
        when: false
      - block:
         - set_fact:
              GlobalVar: "{{ GlobalVar + [5, 6] }}"
         - debug:
              msg: "{{GlobalVar}}"
        when: true