我有以下 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 |
+------------+------------------+----------------------+
我想找到一种从 BlockDeviceMappings
过滤器表达式中引用 RootDeviceName
的方法,而不是对 /dev/sda1 进行硬编码
code> 设备名称,因为有时它是 /dev/xvda
。但是,我找不到在过滤器表达式中引用父元素的方法。
另一种选择是将 RootDeviceName
和 InstanceId
映射到所有设备的投影上,然后将其通过管道传递给过滤器表达式,但语法似乎并不支持在投影中包含父元素。
我是否遗漏了什么,或者这只是 JMESPath 语法的限制?
最佳答案
我们需要某种机制来允许您绑定(bind)范围,但目前这还不可能。我非常有兴趣添加这个。现在您必须使用替代工具。
关于amazon-web-services - JMESPath 过滤器表达式中的引用父元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28673747/