JMESPath 过滤器表达式中的引用父元素

Joe*_*lor 5 amazon-web-services aws-cli jmespath

我有以下 JMESPath 查询

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

aws ec2 describe-instances --query $query
Run Code Online (Sandbox Code Playgroud)

给出这样的输出

+------------+------------------+----------------------+
| 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                |
+------------+------------------+----------------------+
Run Code Online (Sandbox Code Playgroud)

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

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

我是否遗漏了某些内容,或者这只是 JMESPath 语法的限制?

jam*_*sls 5

我们需要某种机制来允许您绑定范围,但目前这还不可能。我非常有兴趣添加这个。现在您必须使用替代工具。

  • @jamesls 现在2018年还是这样吗? (4认同)