如何从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
相关产品推荐
相关产品推荐

