Ell*_*t B 5 amazon-web-services aws-cli jmespath
作为我上一个问题的后续问题,我无法让标签在这种类型的输出中正常工作。我想打印一个表格,其中每个属性作为一行。这就是我期望它的样子:
% aws --output table ec2 describe-instances --instance-id $id --query "Reservations[].Instances[0].[{ Property: 'Type', Value: InstanceType }]"
-------------------------------
| DescribeInstances |
+-----------+-----------------+
| Property | Value |
+-----------+-----------------+
| Type | g4dn.12xlarge |
+-----------+-----------------+
Run Code Online (Sandbox Code Playgroud)
但对于标签名称来说,它看起来像这样:
% aws --output table ec2 describe-instances --instance-id $id --query "Reservations[].Instances[0].[{ Property: 'Name', Value: Tags[?Key =='Name'].Value }]"
-------------------
|DescribeInstances|
+-----------------+
| Property |
+-----------------+
| Name |
+-----------------+
|| Value ||
|+---------------+|
|| Elliott-TKD ||
|+---------------+|
Run Code Online (Sandbox Code Playgroud)
标签值是正确的,但格式很奇怪,当与更多其他行组合时,表格变得非常难看。
查询 ( [?Key == 'Name']) 的过滤器部分正在创建 JMESPath 所描述的投影。
您必须重置此投影才能从中提取单个字符串。
重置投影可以使用管道来实现。
投影是 JMESPath 中的一个重要概念。然而,有时投影语义并不是您想要的。一种常见的情况是,您想要对投影结果进行操作,而不是将表达式投影到数组中的每个元素上。例如,该表达式
people[*].first将为您提供一个数组,其中包含 people 数组中每个人的名字。如果您想要该列表中的第一个元素怎么办?如果您尝试people[*].first[0]只评估first[0]people 数组中的每个元素,并且由于没有为字符串定义索引,因此最终结果将是一个空数组,[]。要实现所需的结果,您可以使用管道表达式<expression> | <expression>来指示投影必须停止。
来源: https: //jmespath.org/tutorial.html#pipe-expressions
因此,您的问题与他们在文档中描述的内容非常接近,并且可以使用以下方法来重置该投影:
Tags[?Key =='Name']|[0].Value
Run Code Online (Sandbox Code Playgroud)
或者,与:
Tags[?Key =='Name'].Value | [0]
Run Code Online (Sandbox Code Playgroud)
这是两个完全相同的查询。
给定 JSON:
Tags[?Key =='Name']|[0].Value
Run Code Online (Sandbox Code Playgroud)
查询
Tags[?Key =='Name'].Value | [0]
Run Code Online (Sandbox Code Playgroud)
将会给出预期的
{
"Reservations": [
{
"Instances": [
{
"Tags": [
{
"Key": "Name",
"Value": "Elliott-TKD"
},
{
"Key": "Foo",
"Value": "Bar"
}
]
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
所以它会在你的表中正确呈现
Reservations[].Instances[0].[{ Property: `Name`, Value: Tags[?Key == `Name`]|[0].Value }]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2814 次 |
| 最近记录: |