我尝试在嵌套循环的任务中使用条件。具体来说,首先我想读取每个用户的不同状态,然后注册变量,并在另一个任务中迭代此变量。
注册变量:
- 名称:“桌面和屏幕保护程序 - 获取角落配置的值” shell: “默认读取/Users/{{ item[0] }}/Library/Preferences/com.apple.dock {{ item[1] }}” 注册:result_CornerConfiguration 循环:“{{查询('嵌套',['{{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:
- 名称:“桌面和屏幕保护程序 - 安全屏幕保护程序角落” osx_默认值: 域:“/Users/{{ item[0] }}/Library/Preferences/com.apple.dock” 键:“{{ item[1] }}” 类型:int 值: 1 循环:“{{查询('嵌套',['{{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”:空, “_ansible_item_label”:[ “用户”, “wvous-bl-corner” ], “_ansible_item_result”:真实, “_ansible_no_log”:false, “_ansible_parsed”:是的, “已更改”:真实, "cmd": "默认读取 /Users/user/Library/Preferences/com.apple.dock wvous-bl-corner", “delta”:“0:00:00.024526”, “结束”:“2018-08-08 14:12:46.834554”, “失败”:错误, “调用”:{ “模块参数”:{ "_raw_params": "默认读取 /Users/user/Library/Preferences/com.apple.dock wvous-bl-corner", “_uses_shell”:真实, “argv”:空, “chdir”:空, “创建”:null, “可执行文件”:空, “删除”:null, “标准输入”:空, “警告”:真 } }, “物品”: [ “用户”, “wvous-bl-corner” ], “rc”:0, “开始”:“2018-08-08 14:12:46.810028”, “stderr”:“”, "stderr_lines": [], “标准输出”:“1”, "stdout_lines": [ “1” ] }, 等等等等... ] } }
如果有人能解决我的问题,我将不胜感激,如果我的解决方案在 Ansible 中无法理解,也许还可以提供更直接的解决方案。:)
最好的祝愿。
编辑:
感谢@Vladimir Botka,我得到了正确的值,现在我尝试在此任务中对其进行迭代:
- 名称:“桌面和屏幕保护程序 - 安全屏幕保护程序角落” osx_默认值: 域:“/Users/{{ item[0] }}/Library/Preferences/com.apple.dock” 键:“{{ item[1] }}” 类型:int 值: 1 循环:“{{查询('嵌套',['{{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]') }}"