如何从Ansible任务输出中提取jobId值并存入变量?
从Ansible任务输出中提取jobId到变量
方法一:正则表达式提取
假设你的Ansible任务已将输出注册到script_output变量中,可通过以下任务提取jobId:
- name: 提取jobId值 set_fact: extracted_job_id: "{{ script_output.msg | join('\n') | regex_search('\"jobId\"\\s*:\\s*\"([^\"]+)\"', '\\1') | first }}"
说明:
- 先把
msg列表拼接成完整字符串,用正则匹配"jobId"对应的取值,通过捕获组提取ID内容,最后取第一个匹配结果。
方法二:解析JSON片段提取
如果输出中的JSON格式规范,这种方法更稳定可靠:
# 第一步:从msg列表中筛选出完整的JSON块 - name: 提取JSON片段 set_fact: job_json_content: "{{ script_output.msg | select('search', '\\{') | join('\n') }}" # 第二步:解析JSON并获取jobId - name: 解析JSON提取jobId set_fact: extracted_job_id: "{{ job_json_content | from_json | json_query('jobId') }}"
说明:
- 先筛选出包含JSON起始符
{的行,拼接成完整的JSON字符串; - 用
from_json将字符串转为JSON对象,再通过json_query直接取出jobId的值(也可以简化为{{ job_json_content | from_json.jobId }})。
内容的提问来源于stack exchange,提问作者Akash-BLR
相关产品推荐
相关产品推荐

