我有以下JMESPath查询

query="Reservations[].Instances[].{ \
    InstanceId: InstanceId, \
    RootDeviceVolumeId: BlockDeviceMappings[?DeviceName==\`/dev/sda1\`] \
       | [].Ebs.VolumeId | [0], \
    RootDeviceName: RootDeviceName \
}"

aws ec2 describe-instances --query $query


给出这样的输出

+------------+------------------+----------------------+
| InstanceId | RootDeviceName   | RootDeviceVolumeId   |
+------------+------------------+----------------------+
|  i-12345678|  /dev/sda1       |  vol-abcdef12        |
|  i-98765432|  /dev/sda1       |  vol-ef123456        |
|  i-23456789|  /dev/sda1       |  vol-fedcba09        |
|  i-aabbccdd|  /dev/xvda       |  None                |
+------------+------------------+----------------------+


我想找到一种从RootDeviceName过滤器表达式中引用BlockDeviceMappings的方法,而不是对/dev/sda1设备名称进行硬编码,因为有时它是/dev/xvda。但是,我找不到在过滤器表达式中引用父元素的方法。

另一个选择是将RootDeviceNameInstanceId映射到所有设备的投影上,然后将其通过管道传递到过滤器表达式,但是该语法似乎也不支持在投影中包含父元素。

我是否缺少某些内容,或者这仅仅是JMESPath语法的限制吗?

最佳答案

我们需要某种机制来允许您绑定作用域,但目前尚无法实现……。我对添加此内容非常感兴趣。目前,您必须使用其他工具。

10-07 18:28