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