You need to enable JavaScript to run this app. Ansible中如何用正则提取字典内字符串值并追加到该字典
优惠活动
大模型
产品
解决方案
定价
更多

Ansible中如何用正则提取字典内字符串值并追加到该字典

核心错误原因

Jinja2 语法不允许嵌套双大括号:在 {{ }} 包裹的表达式内部,直接引用变量名即可,不需要额外加 {{ }}。你给出的错误测试代码修改后即可正常运行:

- name: 修正后的测试语句
  set_fact:
    item: "{{ item | combine({'key': item.content}) }}"
  with_items: "{{ user_keys.results }}"

完整实现方案

不建议直接修改循环变量item,建议将处理后的结果存入独立的新列表,方便后续步骤调用,完整实现如下:

  1. 先初始化空的处理结果列表
- name: 初始化处理后的用户密钥列表
  set_fact:
    processed_user_keys: []
  1. 遍历原始结果,提取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 23:54:05