Ansible | Доступ к многомерной переменной для условных условий во вложенном цикле
Я пытаюсь использовать условные внутри задачи с вложенным циклом. Прежде всего, я хочу прочитать разные состояния для каждого пользователя, зарегистрировать переменную после этого и перебрать эту переменную в другой задаче.
Зарегистрируйте переменную:
- name: "Desktop & Screen Saver - Получить значения для конфигурации углов"
shell: "чтение по умолчанию /Users/{{ item[0] }}/Library/Preferences/com.apple.dock {{ item[1] }}"
регистрация: result_CornerConfiguration
цикл: "{{ query('nested', ['{{ result_GetUsers.stdout_lines }}'], ['wvous-bl-corner', 'wvous-br-corner', 'wvous-tl-corner', 'wvous-tr-corner']) }}"Теперь я хочу установить состояние каждой из этих 4 конфигураций (wvous-bl-corner, wvous-br-corner, wvous-tl-corner, wvous-tr-corner) в 1, но только если фактическое состояние равно 6:
- name: "Desktop & Screen Saver - Безопасные углы заставки"
osx_defaults:
домен: "/ Пользователи / {{item [0]}} / Библиотека / Настройки /com.apple.dock"
ключ: "{{ item[1] }}"
тип: int
значение: 1
цикл: "{{ query('nested', ['{{ result_GetUsers.stdout_lines }}'], ['wvous-bl-corner', 'wvous-br-corner', 'wvous-tl-corner', 'wvous-tr-corner']) }}"
когда:
- result_CornerConfiguration[item[0]][item[1]].stdout|int == 6Я пробовал несколько способов доступа result_CornerConfiguration как массив или как хеш, но на самом деле ничего не работает. Отладка переменной выглядит следующим образом:
хорошо: [localhost] => {
"result_CornerConfiguration": {
"изменилось": правда,
"msg": "Все пункты выполнены",
"Результаты": [
{
"_ansible_ignore_errors": null,
"_ansible_item_label": [
"Пользователь",
"Wvous-бл-уголок"
],
"_ansible_item_result": правда,
"_ansible_no_log": ложь,
"_ansible_parsed": правда,
"изменилось": правда,
"cmd": "чтение по умолчанию /Users/user/Library/Preferences/com.apple.dock wvous-bl-corner",
"дельта": "0:00:00.024526",
"конец": "2018-08-08 14:12:46.834554",
"не удалось": ложь,
"вызов": {
"module_args": {
"_raw_params": "чтение по умолчанию /Users/user/Library/Preferences/com.apple.dock wvous-bl-corner",
"_uses_shell": правда,
"argv": ноль,
"чдир": ноль,
"создает": ноль,
"исполняемый": ноль,
"удаляет": ноль,
"stdin": ноль,
"предупредить": правда
}
},
"вещь": [
"Пользователь",
"Wvous-бл-уголок"
],
"rc": 0,
"начало": "2018-08-08 14:12:46.810028",
"stderr": "",
"stderr_lines": [],
"стандартный вывод": "1",
"stdout_lines": [
"1"
]
},
ну и так далее...
]
}
}Я был бы очень благодарен, если у кого-то есть идея для моей проблемы, возможно, также с более прямым решением, если мое не имеет смысла в Ansible.:)
С наилучшими пожеланиями.
Редактировать:
Благодаря @Vladimir Botka я получил правильное значение, теперь я пытаюсь повторить его в этой задаче:
- name: "Desktop & Screen Saver - Безопасные углы заставки"
osx_defaults:
домен: "/ Пользователи / {{item [0]}} / Библиотека / Настройки /com.apple.dock"
ключ: "{{ item[1] }}"
тип: int
значение: 1
цикл: "{{ query('nested', ['{{ result_GetUsers.stdout_lines }}'], ['wvous-bl-corner', 'wvous-br-corner', 'wvous-tl-corner', 'wvous-tr-corner'], [0, 1, 2, 3]) }}"
когда:
- result_CornerConfiguration.results[item[2]].stdout|int == 6Но оно всегда меняло значение на 1 и также выглядит не очень элегантно из-за третьего списка ([0, 1, 2, 3]).
1 ответ
Это выражение, которое вы ищете?
tasks:
- debug:
msg: "{{ result_CornerConfiguration.results[0]['stdout'] }}"
Цикл с json_query для итерации:
tasks:
- debug:
msg: "{{ item }}"
loop: "{{ result_CornerConfiguration | json_query('results[*][stdout]') }}"