Как я могу сохранить значения в списке var из нескольких задач в ansible?

У меня есть playbook, в котором я выполняю несколько задач. Каждая задача может быть выполнена, если она удовлетворяет условию КОГДА. Я хотел бы сохранить некоторые данные в список, чтобы использовать их позже в процессе.

Вот упрощенный пример, иллюстрирующий мою потребность:

- 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

Я надеюсь, что это достаточно ясно, чтобы помочь мне понять, как это сделать. Спасибо.

Введение в Ansible Roles
Введение в Ansible Roles
Ansible - это отличный инструмент управления конфигурацией, который можно использовать для автоматизации настройки или развертывания на большом...
0
0
221
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вариантом было бы использовать блокировать

Например, пьеса ниже

- 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"
    ]
}

Страшно, насколько похожи наши ответы, а ведь я запостил через 10 секунд после тебя! Кстати, хороший ответ :P

Alassane Ndiaye 13.05.2019 23:09

Спасибо вам обоим (Владимир и Алассан). Оно работало завораживающе.

Kornikopic 14.05.2019 14:22

Вы можете использовать модуль set_fact для назначения переменной и использовать блоки для группировки задачи и шага назначения переменной, чтобы вы могли проверить условия один раз:

---
  - 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

Другие вопросы по теме