Специальные переменные в плейбуках
Переменная results
Описание переменной results
находится в статье Переменная results.
Переменная previous_result
Логика использования переменной previous_result
такая же, как и для переменной results
, однако здесь происходит автоматическая подстановка пути к необходимому результату.
Переменная previous_result
позволяет получить результаты предыдущего модуля, который выполнился в контексте того же корневого плейбука.
Пример использования переменной previous_result
id: playbook_with_forloop_previous_result
name: Playbook with forloop previous_result
version: 0.0.10
type: playbook
tags: [playbook_special_envs]
body:
input:
properties:
name:
type: string
description: ""
default: ""
modules:
- id: test_forloop
body:
type: forloop
modules:
- id: forloop_m_0
body:
type: all
branches:
- summary: Branch 1
id: branch_1
modules:
- id: dummy_string_branch_1
body:
type: script
id: py_dummy_any_arg
input:
any_arg:
type: js
expr: playbook_args.name
parallel: false
skip_failure: true
parallel: false
- id: forloop_m_1
body:
type: script
id: py_dummy_any_arg
input:
any_arg:
type: js
expr: previous_result.branch_1
iterator:
type: js
expr: "[2, 3]"
parallel: false
Пример хранимого результата переменной previous_result
dummy_string_branch_1: We got any_arg: Naame forloop_m_1_: We got any_arg: {"dummy_string_branch_1":{"any_arg":"Naame"}}
Переменная relative_results
Логика использования переменной relative_results
такая же, как и для переменной results
, однако здесь происходит автоматическая подстановка пути к необходимому результату.
Переменная relative_results
автоматически начинает путь к результату от родителя модуля.
Пример использования переменной relative_results
id: playbook_with_forloop_relative_results
name: Playbook with forloop relative results
version: 0.0.6
type: playbook
tags: [playbook_special_envs]
body:
input:
properties:
name:
type: string
description: ""
default: ""
modules:
- id: test_forloop
body:
type: forloop
modules:
- id: forloop_m_0
body:
type: script
id: py_dummy_string_arg
input:
string_arg:
type: js
expr: playbook_args.name
- id: forloop_m_1
body:
type: script
id: py_dummy_any_arg
input:
any_arg:
type: js
expr: relative_results # parent is test_forloop[n]
- id: for_loop_m_2
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
- id: default_case_module_2
body:
type: script
id: py_dummy_any_arg
input:
any_arg:
type: js
expr: relative_results.default_case_module # parent is test_forloop[n].for_loop_m_2.default
branches:
- summary: branch_1
id: conditional_case_module
condition: playbook_args.name == 'Naame'
modules:
- id: cond_case_m_1
body:
type: script
id: py_dummy_string_arg
input:
string_arg:
type: js
expr: playbook_args.name
- id: cond_case_m_2
body:
type: script
id: py_dummy_any_arg
input:
any_arg:
type: js
expr: relative_results.cond_case_m_1 # parent is test_forloop[n].for_loop_m_2.conditional_case_module
iterator:
type: js
expr: "[2]"
parallel: false
- id: last_module
body:
type: script
id: py_dummy_any_arg
input:
any_arg:
type: js
expr: relative_results # basically the same as results, becase parent is root
- id: last_module_2
body:
type: script
id: py_dummy_any_arg
input:
any_arg:
type: js
expr: relative_results.test_forloop[0].forloop_m_0 # basically the same as results, becase parent is root
Пример хранимого результата переменной relative_results
forloop_m_0: We got string_arg: Naame forloop_m_1: We got any_arg: {"iter_idx":0,"iter_value":2,"forloop_m_0":{"string_arg":"Naame"}} cond_case_m_1: We got string_arg: Naame cond_case_m_2: We got any_arg: {"string_arg":"Naame"} last_module # (находится в корне, поэтому по сути для него relative_results = results): {"test_forloop":[{"iter_idx":0,"iter_value":2,"forloop_m_0":{"string_arg":"Naame"},"forloop_m_1":{"any_arg":"{\"iter_idx\":0,\"iter_value\":2,\"forloop_m_0\":{\"string_arg\":\"Naame\"}}"},"for_loop_m_2":{"chosen_branch":"conditional_case_module","conditional_case_module":{"cond_case_m_1":{"string_arg":"Naame"},"cond_case_m_2":{"any_arg":"{\"string_arg\":\"Naame\"}"}}}}]} last_module_2 # (находится в корне, поэтому по сути для него relative_results = results): We got any_arg: {"string_arg":"Naame"}
Переменная iter_ctx
Переменная iter_ctx
содержит в себе информацию о текущей и предыдущей итерациях цикла:
iter_ctx: {"previous_iter":{"index":0,"value":2},"current_iter":{"index":1,"value":4}}
Пример использования переменной iter_ctx
id: playbook_with_forloop_iter_ctx
name: Playbook with forloop iter ctx
version: 0.0.13
type: playbook
body:
input:
properties: {}
modules:
- id: test_forloop
body:
type: forloop
modules:
- id: forloop_m_1
body:
type: script
id: py_dummy_any_arg
input:
any_arg:
type: js
expr: iter_ctx
- id: forloop_m_2
body:
type: script
id: py_dummy_any_arg
input:
any_arg:
type: js
expr: iter_ctx.current_iter.index
- id: forloop_m_3
body:
type: script
id: py_dummy_any_arg
input:
any_arg:
type: js
expr: iter_ctx.previous_iter.value
iterator:
type: js
expr: "[2, 4]"
parallel: false
Использование переменной iter_ctx во вложенных итерациях
Переменная iter_ctx
может использоваться также для того, чтобы узнать контекст родительской итерации.
Она хранит в себе следующие данные:
-
current_iter (index, value)
— информация о текущей итерации. -
previous_iter (index,value)
— информация о предыдущей итерации, если эта итерация существует. -
parent_iter
— информация о родительской итерации, если эта итерация существует. Имеет такую же структуру, как иiter_ctx
.
Если имеется дополнительное вложение, внутри parent_iter может храниться parent_iter . Количество вложений не ограничено.
|
Структура переменной iter_ctx
iter_ctx: {
"current_iter": {
"index": 1,
"value": 4
},
"previous_iter": {
"index": 0,
"value": 2
},
"parent_iter": {
"previous_iter": {
...
},
"current_iter": {
...
},
"parent_iter": {
...
}
}
}
id: playbook_with_nested_iter_ctx name: Playbook with nester iter ctx version: 0.0.6 type: playbook tags: [playbook_special_envs] body: input: properties: {} modules: - id: root_forloop body: type: forloop modules: - id: root_forloop_script body: type: script id: py_dummy_any_arg input: any_arg: type: js # Get whole iter_ctx. expr: iter_ctx - id: root_forloop_nested_forloop body: type: forloop modules: - id: root_forloop_nested_forloop_script body: type: script id: py_dummy_any_arg input: any_arg: type: js # Get current iter of parent iter (root_forloop). expr: iter_ctx.parent_iter.current_iter - id: root_forloop_nested_forloop_branch_all body: type: all parallel: false branches: - summary: Branch 1 id: root_forloop_nested_forloop_branch_all_branch1 modules: - id: root_forloop_nested_forloop_branch_all_branch1_script1 body: type: script id: py_dummy_any_arg input: any_arg: type: js # Get current iter of parent iter (root_forloop). expr: iter_ctx.parent_iter.current_iter - id: root_forloop_nested_forloop_branch_all_branch1_script2 body: type: script id: py_dummy_any_arg input: any_arg: type: js # Get whole iter ctx. expr: iter_ctx - id: root_forloop_nested_forloop_branch_all_branch1_nnforloop body: type: forloop modules: - id: root_forloop_nested_forloop_branch_all_branch1_nnforloop_script1 body: type: script id: py_dummy_any_arg input: any_arg: type: js # Get index of self current iter (root_forloop_nested_forloop_branch_all_branch1_nnforloop). expr: iter_ctx.current_iter.index - id: root_forloop_nested_forloop_branch_all_branch1_nnforloop_script2 body: type: script id: py_dummy_any_arg input: any_arg: type: js # Get current iter of parent of parent (root_forloop). expr: iter_ctx.parent_iter.parent_iter.current_iter iterator: type: js expr: "[2]" parallel: false skip_failures: true iterator: type: js expr: "[2]" parallel: false iterator: type: js expr: "[2]" parallel: false