【问题标题】:Handling missing Tags in 'aws | jq' command (jq: error Cannot iterate over null)处理 'aws | 中缺少的标签jq' 命令(jq:错误无法迭代空)
【发布时间】:2021-09-30 06:20:34
【问题描述】:

我正在尝试编写一个简单的脚本来使用“jq”输出 AWS EC2 实例信息表(实例 ID、IP、名称)。

然而,在我们的环境中,一些实例没有任何关联的标签,所以当我运行我的脚本时,我得到一个错误,此时 jq 在迭代数组的剩余元素之前停止处理:

$ aws ec2 describe-instances | \
  jq -r '.Reservations[].Instances[] | (.Tags | from_entries) as $tags | "\(.InstanceId)  \(.PrivateIpAddress)  \($tags.Name)"'

i-0664dc6c236767b4e  10.177.99.141  foo
i-02077630c093d65dc  10.177.99.85  bar
jq: error (at <stdin>:2108): Cannot iterate over null (null)

有没有一种方法可以过滤不存在​​的标签并将占位符值替换为名称(如“-”),以避免此错误并产生干净的输出?

【问题讨论】:

    标签: jq aws-cli


    【解决方案1】:

    要忽略这些实例,您可以使用.Tags // empty,如下所示:

    jq -r '.Reservations[].Instances[]
      | ((.Tags // empty) | from_entries) as $tags
      | "\(.InstanceId)  \(.PrivateIpAddress)  \($tags.Name)"'
    

    添加占位符值的一种方法是使用if ... then ... else ... end 构造,例如

    jq -r '
    .Reservations[].Instances[]
      | (if .Tags then (.Tags | from_entries).Name else "-" end) as $name
      | "\(.InstanceId)  \(.PrivateIpAddress)  \($name)"'
    

    如果您需要更多详细信息,请按照 minimal complete verifiable example guidelines.

    【讨论】:

      猜你喜欢
      • 2019-11-02
      • 2019-09-14
      • 2015-03-28
      • 2019-07-14
      • 2019-08-04
      • 2023-04-04
      • 2021-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多