使用Ansible获取指定挂载点的设备名称

110次阅读
没有评论

问题描述

在使用Ansible时,用户想要通过Ansible facts获取指定挂载点的设备名称,他已经能够获取”ansible_mounts”列表,但不知道如何根据挂载点的值获取对应的设备名称。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

在Ansible中,可以使用json_query来筛选所需的数据。以下是一个示例使用json_query来获取指定挂载点(”/”)的设备名称的步骤:

  1. 使用set_fact将满足条件的设备名称存储到一个变量中。
  2. 使用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中获取到指定挂载点的设备名称了。

正文完