Ansible | 在嵌套循环任务中访问条件多维变量

Ansible | 在嵌套循环任务中访问条件多维变量

我尝试在嵌套循环的任务中使用条件。具体来说,首先我想读取每个用户的不同状态,然后注册变量,并在另一个任务中迭代此变量。

注册变量:

- 名称:“桌面和屏幕保护程序 - 获取角落配置的值”
  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]') }}"           

相关内容