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

如何从Ansible执行lsblk返回的JSON结果中提取根分区UUID

Ansible从lsblk JSON输出提取根分区UUID的方法

原代码问题说明

  • cmdout.stdout是字符串格式,需要先用from_json过滤器转换为JSON对象才能执行查询
  • lsblk输出的JSON顶层键名为blockdevices,不是你写的entry
  • 根分区在LVM子层级中,需要用递归查询规则才能跨层级匹配到目标设备

修正后的实现代码

- name: 获取磁盘信息
  command: lsblk -f -J /dev/sda
  register: cmdout

- name: 提取根分区UUID到变量
  set_fact:
    root_uuid: "{{ cmdout.stdout | from_json | json_query('blockdevices[*]..[?mountpoint==`/`].uuid') | first }}"

- name: 打印根分区UUID
  debug:
    msg: "根设备UUID为: {{ root_uuid }}"

规则说明

  • blockdevices[*]:遍历顶层所有块设备
  • ..:递归查询所有子层级的children节点,兼容普通分区、LVM、软RAID等各种层级结构,不需要手动写多层children路径
  • [?mountpoint==/]:过滤挂载点为根目录的设备
  • uuid:提取目标设备的uuid字段
  • first:取查询结果列表的第一个元素,得到字符串格式的UUID值

内容的提问来源于stack exchange,提问作者sfgroups

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:15:01