You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible筛选指定用户后校验visibility值的语法错误排查

Ansible任务修正:检查指定用户的visibility值

问题背景

API返回结果如下:

ok: [myserver] => {
    "result": {
        // ...
        "json": [
            {
                "active": true,
                "created": "2023-07-22T15:25:34+04:00",
                "description": "",
                "id": 1,
                "language": "en-US",
                "username": "mike",
                "visibility": "private",
                // ...
            },
            {
                // ...
            },
            // ...
        ],
        // ...
    }
}

为检查username为mike的元素的visibility值是否为private,编写了如下Ansible任务:

- debug:
    msg="{{result.json | selectattr('username', 'equalto', 'mike') | map(attribute='visibility') == 'private'}}"

执行后返回结果:

TASK [myplaybook : debug] ****************************************************
ok: [myserver] => {
    "msg": false
}

预期返回true但实际为false,需修正语法错误。

问题原因与修正方案

错误核心在于:selectattr+map的组合返回的是列表类型,直接将列表与字符串'private'做相等判断,结果必然为false。

以下是几种可行的修正方式:

方式1:提取列表首个元素后判断

若确定username为mike的元素仅存在一个,可直接提取列表第一个元素进行比较:

- debug:
    msg="{{ (result.json | selectattr('username', 'equalto', 'mike') | map(attribute='visibility') | first) == 'private' }}"

方式2:判断列表是否包含目标值

若不确定匹配元素的数量,仅需确认列表中存在'private'值:

- debug:
    msg="'private' in (result.json | selectattr('username', 'equalto', 'mike') | map(attribute='visibility'))"

方式3:用json_query简化查询(推荐)

使用json_query可以更简洁地完成过滤与判断:

- debug:
    msg="{{ result.json | json_query('[?username==`mike`].visibility') | first == 'private' }}"

内容的提问来源于stack exchange,提问作者lonix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 20:23:13