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