Ansible如何从ldap_search结果提取uid并构造LDAP查询过滤器
实现方法
你可以直接用Ansible自带的Jinja2过滤器完成提取和拼接,不需要额外依赖,有两种实现方式:
方式1:字符串拆分(更稳定,无需正则)
直接按逗号拆分DN,取第一个元素就是完整的uid=xxx片段,不会出现正则匹配误差:
# 假设你ldap_search的返回结果存储在变量 ldap_search_result 中 - name: 提取所有uid片段 set_fact: ldap_uid_list: "{{ ldap_search_result.msg.results[0].uniquemember | map('split', ',') | map('first') | list }}" - name: 拼接为目标LDAP过滤器格式 set_fact: ldap_filter: "(({{ ldap_uid_list | join('),(') }}))"
方式2:正则匹配(和你思路一致,修正匹配规则)
如果需要用正则实现,优化正则规则为匹配开头到第一个逗号前的uid=段,避免匹配错误:
- name: 正则提取uid片段 set_fact: ldap_uid_list: "{{ ldap_search_result.msg.results[0].uniquemember | map('regex_replace', '^(uid=[^,]+),.*', '\\1') | list }}" # 拼接逻辑和方式1完全一致 - name: 拼接为目标LDAP过滤器格式 set_fact: ldap_filter: "(({{ ldap_uid_list | join('),(') }}))"
生成的ldap_filter变量就是你需要的格式,可以直接用作后续LDAP查询的过滤器参数。
内容的提问来源于stack exchange,提问作者cava cavamagie
相关产品推荐
相关产品推荐

