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]') }}"           
Другие вопросы по тегам