【问题标题】:Getting just a string from a list从列表中获取一个字符串
【发布时间】:2022-01-20 14:25:30
【问题描述】:

如何从“标签”中获取 1 个输出?

尝试执行 -o=jsonpath='{.metadata.labels[0]}' 以希望获得第一个字符串,但这引发了错误。

 "metadata": {
        "labels": {
            "beta.kubernetes.io/arch": "amd64",
            "beta.kubernetes.io/os": "linux",
            "kubernetes.io/arch": "amd64",
            "kubernetes.io/hostname": "143.110.156.190",
            "kubernetes.io/os": "linux",
            "node-role.kubernetes.io/controlplane": "true",
            "node-role.kubernetes.io/etcd": "true",
            "node-role.kubernetes.io/worker": "true"
        },

【问题讨论】:

  • 为什么要获取1st 字符串?为什么不按名称获取?
  • 这只是一个例子。我正在学习 JSONPATH 如何与 kubectl 一起工作。并且想知道我是否可以只得到一个字符串而不是所有字符串。
  • 在这个特定的问题中,最好按名称获取,因为输入不是用于索引的数组。另外,为了学习它是有意义的,但在现实世界中这个问题没有任何意义。
  • 是的!本来要说的是不保证条目的顺序,可能会改变,但如果只是为了学习,那为什么不呢!
  • $.metadata.labels['beta.kubernetes.io/arch'] 是唯一的选择。

标签: kubernetes kubectl jsonpath


【解决方案1】:

metadata.labels 不是数组,所以不要认为 '{.metadata.labels[0]}' 会起作用。

您可以尝试的一个选项是使用 shell 获取第一个值,如下所示:

kubectl get ingress -o json | jq '.items[0].metadata.labels' | head -2 |tr -d , |cat - <(echo "}") | jq

【讨论】:

  • 这行得通,谢谢。但我希望有 JSONPATH 格式。只是想知道字典是否可能。
【解决方案2】:

Kubectl 使用 JSONPath 表达式过滤 JSON 对象中的特定字段并格式化输出:

kubectl get ingress -o=jsonpath='{.items[0].metadata.labels}'

参考以下链接: https://kubernetes.io/docs/reference/kubectl/jsonpath/

【讨论】:

  • OP 已经尝试过这样做。请参阅帖子的第一行。 OP 正在寻找第一个标签,而不是所有标签,并想知道这是否可以使用 JSONPATH 完成
猜你喜欢
  • 1970-01-01
  • 2022-01-11
  • 2012-01-12
  • 2013-07-05
  • 1970-01-01
  • 2013-03-01
  • 2011-10-29
  • 2015-03-24
  • 2016-06-03
相关资源
最近更新 更多