Ansible | Acessar variável multidimensional para quando condicional na tarefa de loop aninhado

1

Eu tento usar uma condicional quando dentro de uma tarefa com um loop aninhado. Especificamente, em primeiro lugar, quero ler estados diferentes por usuário, registrar a variável depois disso e querer iterar essa variável em outra tarefa.

Registre a variável:

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

Agora eu quero definir o estado de cada uma dessas 4 configurações (wvous-bl-corner, wvous-br-corner, wvous-tl-corner, wvous-tr-corner) para 1, mas somente se o estado real é 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

Eu tentei várias maneiras de acessar result_CornerConfiguration como uma matriz ou como um hash, mas nada realmente funciona. A depuração da variável é assim:

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 ...
        ]
    }
}

Eu ficaria muito grato se alguém tivesse uma idéia para o meu problema, talvez também com uma solução mais direta se o meu não fizer sentido de uma maneira Ansible. :)

Felicidades.

Editar:

Graças a @Vladimir Botka, recebi o valor correto, agora tento iterar nessa tarefa:

 - 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

Mas sempre alterou o valor para 1 e também não parece muito elegante por causa da terceira lista ([0, 1, 2, 3]).

    
por biotecs 08.08.2018 / 14:50

1 resposta

0

Esta é a expressão que você está procurando?

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

Faça um loop com json_query para iterar:

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