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

Ansible中使用selectattr实现不区分大小写属性筛选的问题求助

Ansible中使用selectattr实现不区分大小写属性筛选的问题求助

各位大佬好,我现在碰到个Ansible的小问题,想请教下大家。我需要对__app_pools_info.app_pools这个列表里的元素,根据嵌套属性attributes.processModel.userName做不区分大小写的筛选,然后提取对应的name字段。试了好几种写法都踩坑了,具体情况如下:

  • 第一种写法能正常运行,但做不到大小写不敏感匹配:
    我只把目标变量username_var转成了小写,但原属性值如果是大写或者混合大小写的话就匹配不上,完全没达到不区分大小写的效果

    __app_pools_info.app_pools | selectattr('attributes.processModel.userName', 'equalto', username_var | lower) | map(attribute='name') | list
    
  • 第二种写法尝试把属性值也转小写,结果直接报错processModel is undefined:
    我想当然地在属性路径后面加了| lower,但显然selectattr不支持这种语法,没法直接对属性路径应用过滤器

    __app_pools_info.app_pools | selectattr('attributes.processModel.userName' | lower, 'equalto', username_var | lower) | map(attribute='name') | list
    
  • 第三种写法瞎试了给selectattr传lower参数,结果报错说to_lower参数数量不对:
    以为可以给比较器加个小写转换的参数,结果完全用错了方式,这种写法根本不符合selectattr的规则

    __app_pools_info.app_pools | selectattr('attributes.processModel.userName', 'lower,' 'equalto', username_var | lower) | map(attribute='name') | list
    
  • 第四种写法想用search比较器加忽略大小写,但用户名里有斜杠/,触发了正则转义错误:
    提示re.error: bad escape,因为search会把传入的用户名当成正则表达式处理,斜杠成了特殊字符,转义起来特别麻烦,实在不想搞正则那套

    __app_pools_info.app_pools | selectattr('attributes.processModel.userName', 'search', username_var | lower, ignorecase=true) | map(attribute='name') | list
    

有没有大佬能指点下,正确的不区分大小写的相等匹配写法应该是啥样的呀?实在不想绕远路处理正则转义的问题,就想简单做个大小写不敏感的属性值相等筛选。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 09:28:01