У меня есть 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
Я надеюсь, что это достаточно ясно, чтобы помочь мне понять, как это сделать. Спасибо.
Вариантом было бы использовать блокировать
Например, пьеса ниже
- 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"
]
}
Спасибо вам обоим (Владимир и Алассан). Оно работало завораживающе.
Вы можете использовать модуль 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
Страшно, насколько похожи наши ответы, а ведь я запостил через 10 секунд после тебя! Кстати, хороший ответ :P