Назад | Перейти на главную страницу

Ansible | Доступ к многомерной переменной при условии, что в задаче вложенного цикла

Я пытаюсь использовать условное выражение внутри задачи с вложенным циклом. В частности, прежде всего я хочу прочитать разные состояния для каждого пользователя, зарегистрировать переменную после этого и перебрать эту переменную в другой задаче.

Зарегистрируйте переменную:

- name: "Desktop & Screen Saver - Get values for corner configuration"
  shell: "defaults read /Users/{{ item[0] }}/Library/Preferences/com.apple.dock {{ item[1] }}"
  register: result_CornerConfiguration
  loop: "{{ 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 - Secure screen saver corners"
   osx_defaults:
       domain: "/Users/{{ item[0] }}/Library/Preferences/com.apple.dock"
       key: "{{ item[1] }}"
       type: int
       value: 1
   loop: "{{ query('nested', ['{{ result_GetUsers.stdout_lines }}'], ['wvous-bl-corner', 'wvous-br-corner', 'wvous-tl-corner', 'wvous-tr-corner']) }}"
   when:
     - result_CornerConfiguration[item[0]][item[1]].stdout|int == 6

Я пробовал несколько способов получить доступ result_CornerConfiguration как массив или как хеш, но на самом деле ничего не работает. Отладка переменной выглядит так:

ok: [localhost] => {
    "result_CornerConfiguration": {
        "changed": true,
        "msg": "All items completed",
        "results": [
            {
                "_ansible_ignore_errors": null,
                "_ansible_item_label": [
                    "user",
                    "wvous-bl-corner"
                ],
                "_ansible_item_result": true,
                "_ansible_no_log": false,
                "_ansible_parsed": true,
                "changed": true,
                "cmd": "defaults read /Users/user/Library/Preferences/com.apple.dock wvous-bl-corner",
                "delta": "0:00:00.024526",
                "end": "2018-08-08 14:12:46.834554",
                "failed": false,
                "invocation": {
                    "module_args": {
                        "_raw_params": "defaults read /Users/user/Library/Preferences/com.apple.dock wvous-bl-corner",
                        "_uses_shell": true,
                        "argv": null,
                        "chdir": null,
                        "creates": null,
                        "executable": null,
                        "removes": null,
                        "stdin": null,
                        "warn": true
                    }
                },
                "item": [
                    "user",
                    "wvous-bl-corner"
                ],
                "rc": 0,
                "start": "2018-08-08 14:12:46.810028",
                "stderr": "",
                "stderr_lines": [],
                "stdout": "1",
                "stdout_lines": [
                    "1"
                ]
            },
            so on and so on ...
        ]
    }
}

Я был бы очень благодарен, если у кого-нибудь есть идея для моей проблемы, может быть, также с более прямым решением, если мое решение не имеет смысла в Ansible. :)

С наилучшими пожеланиями.

Редактировать:

Благодаря @Vladimir Botka я получил правильное значение, теперь я пытаюсь перебрать его в этой задаче:

 - name:  "Desktop & Screen Saver - Secure screen saver corners"
   osx_defaults:
       domain: "/Users/{{ item[0] }}/Library/Preferences/com.apple.dock"
       key: "{{ item[1] }}"
       type: int
       value: 1
   loop: "{{ query('nested', ['{{ result_GetUsers.stdout_lines }}'], ['wvous-bl-corner', 'wvous-br-corner', 'wvous-tl-corner', 'wvous-tr-corner'], [0, 1, 2, 3]) }}"
   when:
     - result_CornerConfiguration.results[item[2]].stdout|int == 6

Но он всегда менял значение на 1 и также кажется не очень элегантным из-за третьего списка ([0, 1, 2, 3]).

Это то выражение, которое вы ищете?

tasks:                                                                                     
  - debug:
      msg: "{{ result_CornerConfiguration.results[0]['stdout'] }}"

Цикл с json_query для итерации:

  tasks:                                                                                     
    - debug:                                                                                 
        msg: "{{ item }}"                                                                    
      loop: "{{ result_CornerConfiguration | json_query('results[*][stdout]') }}"