Ansible中如何用正则提取字典内字符串值并追加到该字典
核心错误原因
Jinja2 语法不允许嵌套双大括号:在 {{ }} 包裹的表达式内部,直接引用变量名即可,不需要额外加 {{ }}。你给出的错误测试代码修改后即可正常运行:
- name: 修正后的测试语句 set_fact: item: "{{ item | combine({'key': item.content}) }}" with_items: "{{ user_keys.results }}"
完整实现方案
不建议直接修改循环变量item,建议将处理后的结果存入独立的新列表,方便后续步骤调用,完整实现如下:
- 先初始化空的处理结果列表
- name: 初始化处理后的用户密钥列表 set_fact: processed_user_keys: []
- 遍历原始结果,提取uid并追加到新列表
- name: 提取uid并更新用户密钥条目 set_fact: processed_user_keys: "{{ processed_user_keys + [ item | combine({ 'uid': item.content | regex_search('unixid=(\\d+)', '\\1') | first | default('') }) ] }}" loop: "{{ user_keys.results }}"
说明:如果需要保留完整的unixid=xxx格式而非仅提取数字,可将正则部分改为regex_search('unixid=\\d+'),同时删除后面的first过滤器即可。
后续调用方式
后续步骤直接遍历processed_user_keys变量即可,每个元素都已经包含提取好的uid字段,示例:
- name: 打印用户uid与公钥对应关系 debug: msg: "用户UID:{{ item.uid }},公钥内容:{{ item.content }}" loop: "{{ processed_user_keys }}"
内容的提问来源于stack exchange,提问作者dsollen
相关产品推荐
相关产品推荐

