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

如何从Ansible多行Fact中提取匹配linux-arm64的校验和并设置为新Fact

如何从Ansible多行Fact中提取匹配linux-arm64的校验和并设置为新Fact

我来帮你搞定这个需求!你已经通过uri模块成功拉取到了Sealed Secrets的校验和文件内容,接下来只需要借助Ansible的字符串处理过滤器,就能轻松提取出对应linux-arm64版本的校验和并设置为新的Fact。

方法一:使用正则表达式提取(推荐)

直接用regex_search过滤器匹配目标行并提取校验和,这种方式精准且高效:

# 保留你原来获取校验和的任务
- name: Fetch Sealed Secrets checksums
  ansible.builtin.uri:
    url: https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.24.5/sealed-secrets_0.24.5_checksums.txt
    return_content: true
  register: checksums

# 新增提取校验和并设置Fact的任务
- name: Extract linux-arm64 checksum to fact
  ansible.builtin.set_fact:
    linux_arm64_checksum: "{{ checksums.content | regex_search('^([a-f0-9]+)\\s+kubeseal-.*linux-arm64\\.tar\\.gz$', '\\1', multiline=True) | first }}"

# 调试验证结果
- name: Output extracted checksum
  ansible.builtin.debug:
    var: linux_arm64_checksum

代码解释:

  • regex_search启用multiline=True,让^可以匹配每一行的开头
  • 正则表达式^([a-f0-9]+)\\s+kubeseal-.*linux-arm64\\.tar\\.gz$会精准匹配包含linux-arm64的校验和行,并用\\1捕获校验和部分
  • | first用来取出匹配结果列表中的唯一元素(因为只会匹配到一行)

运行后你会看到期望的结果:

TASK [Output extracted checksum] *********
ok: [localhost] =>
linux_arm64_checksum: 6bc27346b2f32c85e230161070ffe5c8502360b94aee4cfcedfc512de32543f8

方法二:按行分割筛选(更直观)

如果你觉得正则有点复杂,也可以用更直观的字符串分割+筛选方式:

- name: Extract linux-arm64 checksum (alternative approach)
  ansible.builtin.set_fact:
    linux_arm64_checksum: "{{ checksums.content.splitlines() | select('search', 'linux-arm64') | first | split | first }}"

代码解释:

  • splitlines()把多行内容拆分成单行列表
  • select('search', 'linux-arm64')筛选出包含目标字符串的行
  • | first取筛选后的第一行(唯一匹配行)
  • split按空格分割该行,再用| first取出第一个元素(即校验和)

两种方法都能完美实现你的需求,你可以根据自己的习惯选择使用~

备注:内容来源于stack exchange,提问作者Floren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 09:38:04