我有以下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
。但是,我找不到在过滤器表达式中引用父元素的方法。另一个选择是将
RootDeviceName
和InstanceId
映射到所有设备的投影上,然后将其通过管道传递到过滤器表达式,但是该语法似乎也不支持在投影中包含父元素。我是否缺少某些内容,或者这仅仅是JMESPath语法的限制吗?
最佳答案
我们需要某种机制来允许您绑定作用域,但目前尚无法实现……。我对添加此内容非常感兴趣。目前,您必须使用其他工具。