首页 > 解决方案 > 使用 ansible _mount 和 json_jquery 的剧本任务引发错误

问题描述

我试图使用下面的任务来验证 /dev/vdb 分区的挂载点是否是使用 ansible_mount 的 /data。但是下面的剧本任务正在​​向我抛出断言失败错误。有人可以建议我为什么会抛出错误或指导我采用正确的方法。

PS:我对使用 shell 命令不感兴趣

 - name: test for disk partitions
    vars:
      mount_data: "{{ ansible_mounts|json_query('[?device == `/dev/vdb`].mount') }}"

    assert:
      that:  mount_data == "/data"
      success_msg : "Expected mount point"

ansible_mounts 如下所示:

"ansible_mounts": [
            {
                "block_available": 51550174,
                "block_size": 4096,
                "block_total": 52425979,
                "block_used": 875805,
                "device": "/dev/vda1",
                "fstype": "xfs",
                "inode_available": 104768494,
                "inode_total": 104857072,
                "inode_used": 88578,
                "mount": "/",
                "options": "rw,relatime,attr2,inode64,noquota",
                "size_available": 211149512704,
                "size_total": 214736809984,
                "uuid": "3ef2b806-efd7-4eef-aaa2-2584909365ff"
            },
            {
                "block_available": 314410952,
                "block_size": 4096,
                "block_total": 314419200,
                "block_used": 8248,
                "device": "/dev/vdb",
                "fstype": "xfs",
                "inode_available": 125829117,
                "inode_total": 125829120,
                "inode_used": 3,
                "mount": "/data",
                "options": "rw,relatime,attr2,inode64,noquota",
                "size_available": 1287827259392,
                "size_total": 1287861043200,
                "uuid": "5214b6b0-04af-4ce9-ba46-06fa050d315f"
            },
            {
                "block_available": 26193352,
                "block_size": 4096,
                "block_total": 26201600,
                "block_used": 8248,
                "device": "/dev/vdc",
                "fstype": "xfs",
                "inode_available": 52428797,
                "inode_total": 52428800,
                "inode_used": 3,
                "mount": "/var/corefiles",
                "options": "rw,relatime,attr2,inode64,noquota",
                "size_available": 107287969792,
                "size_total": 107321753600,
                "uuid": "b7f230b1-ec81-4cd6-b2d4-20579eb135c6"
            }
        ],

我在执行任务时遇到的错误

  FAILED! => {
    "assertion": "uu  == \"uu\"",
    "changed": false,
    "evaluated_to": false,
    "msg": "Assertion failed"
}

标签: ansibledevops

解决方案


您的jmespath表达式json_query正在返回一个安装点列表,即使它只返回一个元素。

您需要:

  1. 检查列表的第一个元素是否等于您的字符串
  2. 检查您的字符串是否包含在列表中

以下所有三种解决方案都应该有效:

that: mount_data.0 == "/data"
that: mount_data is contains "/data"
that: '"/data" in mount_data'

推荐阅读