Переменная results
Переменная results
содержит результаты выполнения корневого плейбука в иерархическом виде.
Если плейбук не является корневым, то есть он был запущен другим плейбуком, внутренний плейбук хранит только свои внутренние результаты.
Передача значения переменной во входные аргументы
Переменную results
можно передавать во входные аргументы модулей.
Пример
В этом примере передаются результаты модуля forloop_m_1
первой итерации модуля test_forloop
.
input:
any_arg:
type: js
expr: results.test_forloop[0].forloop_m_1
При необходимости отладки можно передавать результаты в полном виде: expr: results
.
Таблица ниже описывает, какой результат хранит переменная results
в определенных модулях.
Модуль | Результат | Пример |
---|---|---|
Скрипт или плейбук |
Результат выполнения конкретного запуска |
|
Массив объектов, где каждый объект содержит информацию о номере итерации, итерируемом значении и результатах выполнения внутренних модулей. |
|
|
Массив объектов, где каждый объект содержит информацию о номере итерации и результатах выполнения внутренних модулей |
|
|
Объект, содержащий информацию о выбранной ветке и результатах выполнения внутренних модулей |
|
|
Иерархические результаты вида branch_id.branch_module_id |
|
Если модуль цикла (whileloop или forloop ) состоит из одного внутреннего модуля, результатом модуля цикла будет считаться результат внутреннего модуля.
|
Сценарии использования переменной
Пример 1
В системе запущена обработка 10 инцидентов. В рамках обработки для каждого инцидента выполняется последовательность действий:
-
регистрация инцидента в системе;
-
отправка инцидента по email;
-
удаление инцидента из системы.
Затем нужно проверить результат отправки каждого инцидента по email. Для этого используется значение
results.for_loop_id[0..N].email_send_step_id
.
Пример 2
В системе для итерации внутри модуля forloop
имеется неоднородный список сущностей.
Известно, что каждый третий элемент является файлом с определенным атрибутом.
Для каждого такого элемента необходимо узнать результат выполнения всей цепочки.
Эту информацию можно получить с помощью переменной results
.
Примеры скриптов и плейбуков
Скрипты
Скрипт, принимающий и выводящий в консоль any
id: py_dummy_any_arg
name: Py dummy any arg
version: 0.0.1
status: "experimental"
date: ""
author: R-Vision
type: script
source: !py |
def main(any_arg):
print(f"We got any_arg: {any_arg}")
return {"any_arg": any_arg}
Скрипт, принимающий и возвращающий num
аргумент
id: py_dummy_num_arg
name: Py dummy num arg
version: 0.0.1
status: "experimental"
date: ""
author: R-Vision
type: script
source: !py |
def main(num_arg: int):
print(f"We got num_arg: {num_arg}")
return {"num_arg": num_arg}
Плейбук
Плейбук в примере содержит модули:
-
модуль
test_forloop
(циклический модуль, делающий одну итерацию). Он состоит из следующих модулей:-
while_loop
; -
скрипт;
-
all
; -
case
.
-
-
модуль
last_module
— скрипт, принимающий и выводящий переменную results полностью. -
модуль
last_module_2
— скрипт, принимающий и выводящий результаты модуляforloop_m_1
первой итерации модуляtest_forloop
.
Плейбук
id: playbook_with_forloop_dbg
name: Playbook with forloop dbg
version: 0.0.25
type: playbook
body:
input:
properties:
name:
type: string
description: ""
default: ""
modules:
- id: test_forloop
body:
type: forloop
modules:
- id: forloop_m_0
body:
type: whileloop
skip_failures: false
modules:
- id: forloop_m_0_m
body:
type: script
id: py_dummy_num_arg
input:
num_arg:
type: js
expr: '3'
- id: forloop_m_1_m
body:
type: script
id: py_dummy_num_arg
input:
num_arg:
type: js
expr: '3'
stop_after_if:
expr: 3 == 3
skip_if_stopped: false
- id: forloop_m_1
body:
type: script
id: py_dummy_string_arg
input:
string_arg:
type: js
expr: playbook_args.name
- id: forloop_m_2
body:
type: all
branches:
- summary: Branch 1
id: branch_1
modules:
- id: dummy_string_branch_1_module
body:
type: script
id: py_dummy_string_arg
input:
string_arg:
type: js
expr: playbook_args.name
parallel: false
skip_failure: true
- id: for_loop_m_3
body:
type: case
default:
- id: default_case_module
body:
type: script
id: py_dummy_string_arg
input:
string_arg:
type: js
expr: playbook_args.name
branches:
- summary: branch_1
id: conditional_case_module
condition: playbook_args.name == 'Naame'
modules:
- id: Dummy module with 1 arg
body:
type: script
id: py_dummy_string_arg
input:
string_arg:
type: js
expr: playbook_args.name
iterator:
type: js
expr: "[2]"
parallel: false
- id: last_module
body:
type: script
id: py_dummy_any_arg
input:
any_arg:
type: js
expr: results
- id: last_module_2
body:
type: script
id: py_dummy_any_arg
input:
any_arg:
type: js
expr: results.test_forloop[0].forloop_m_1
Вывод модуля last_module
job 862b090a-f513-400f-a52d-04b4151fae0a on worker default_worker_name (tag: all) --- PYTHON CODE EXECUTION --- We got any_arg: {"test_forloop":[{"iter_idx":0,"iter_value":2,"forloop_m_0":[{"iter_idx":0,"forloop_m_0_m":{"num_arg":3},"forloop_m_1_m":{"num_arg":3}}],"forloop_m_1":{"string_arg":"Naame"},"forloop_m_2":{"branch_1":{"dummy_string_branch_1_module":{"string_arg":"Naame"}}},"for_loop_m_3":{"chosen_branch":"conditional_case_module","conditional_case_module":{"Dummy module with 1 arg":{"string_arg":"Naame"}}}}]}
Вывод модуля last_module_2
job c6ae64ed-3f36-4151-b16c-dd4e14efe447 on worker default_worker_name (tag: all) --- PYTHON CODE EXECUTION --- We got any_arg: {"string_arg":"Name"}