【发布时间】:2015-02-23 12:23:03
【问题描述】:
我有以下 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 设备名称,因为有时它是/dev/xvda。但是,我找不到在过滤器表达式中引用父元素的方法。
另一种选择是将RootDeviceName 和InstanceId 映射到所有设备的投影上,然后通过管道将其传递给过滤器表达式,但语法似乎也不支持在投影中包含父元素。
是我遗漏了什么还是这仅仅是 JMESPath 语法的限制?
【问题讨论】:
标签: amazon-web-services aws-cli jmespath