问题描述
在使用Ansible时,用户想要通过Ansible facts获取指定挂载点的设备名称,他已经能够获取”ansible_mounts”列表,但不知道如何根据挂载点的值获取对应的设备名称。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
在Ansible中,可以使用json_query
来筛选所需的数据。以下是一个示例使用json_query
来获取指定挂载点(”/”)的设备名称的步骤:
- 使用
set_fact
将满足条件的设备名称存储到一个变量中。 - 使用
debug
输出这个变量的值。
- set_fact:
my_device: "{{ ansible_mounts|json_query(query) }}"
vars:
query: "[?mount=='/'].device"
- debug:
var: my_device
上述代码将会输出如下内容:
my_device:
- /dev/sdc1
如果只需要列表中的第一个元素,可以在json_query
后添加|first
过滤器:
- set_fact:
my_device: "{{ ansible_mounts|json_query(query)|first }}"
这样将会得到设备名称的字符串,可以使用{{ my_device }}
来访问这个值。
注意:结果是一个列表的形式,因为通常可能会有多个匹配。如果确保只有一个匹配,可以使用
|first
来获取列表中的第一个元素。
这样,通过使用json_query
,你就可以从Ansible facts中获取到指定挂载点的设备名称了。
正文完