首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从注释对象中提取Kubernestes豆荚mac地址

如何从注释对象中提取Kubernestes豆荚mac地址
EN

Stack Overflow用户
提问于 2020-05-24 17:14:22
回答 2查看 540关注 0票数 0

我试图使用json过滤器中的kubectl或jq来提取metadata.annotations下的mac或ips地址。其他对象很容易操作以获得这些值。

kubectl在注释下得到po -o json -n multus_jq -r .items,有复制的CNI信息,但没关系。我喜欢使用jq提取那些MAC地址。这件事似乎很棘手。

代码语言:javascript
复制
[
  {
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
      "annotations": {
        "k8s.v1.cni.cncf.io/network-status": "[{\n    \"name\": \"eps-cni\",\n    \"ips\": [\n        \"172.31.83.216\"\n    ],\n    \"default\": true,\n    \"dns\": {}\n},{\n    \"name\": \"ipvlan1-busybox1\",\n    \"interface\": \"net1\",\n    \"ips\": [\n        \"172.31.230.70\"\n    ],\n    \"mac\": \"0a:2d:40:c6:f8:ea\",\n    \"dns\": {}\n},{\n    \"name\": \"ipvlan2-busybox1\",\n    \"interface\": \"net2\",\n    \"ips\": [\n        \"172.31.232.70\"\n    ],\n    \"mac\": \"0a:52:8a:62:5d:f4\",\n    \"dns\": {}\n}]",
        "k8s.v1.cni.cncf.io/networks": "ipvlan1-busybox1, ipvlan2-busybox1",
        "k8s.v1.cni.cncf.io/networks-status": "[{\n    \"name\": \"eps-cni\",\n    \"ips\": [\n        \"172.31.83.216\"\n    ],\n    \"default\": true,\n    \"dns\": {}\n},{\n    \"name\": \"ipvlan1-busybox1\",\n    \"interface\": \"net1\",\n    \"ips\": [\n        \"172.31.230.70\"\n    ],\n    \"mac\": \"0a:2d:40:c6:f8:ea\",\n    \"dns\": {}\n},{\n    \"name\": \"ipvlan2-busybox1\",\n    \"interface\": \"net2\",\n    \"ips\": [\n        \"172.31.232.70\"\n    ],\n    \"mac\": \"0a:52:8a:62:5d:f4\",\n    \"dns\": {}\n}]",
        "kubernetes.io/psp": "eps.privileged"
      },
      "creationTimestamp": "2020-05-24T17:09:10Z",
      "generateName": "busybox1-f476958bd-",
      "labels": {
        "app": "busybox",
        "pod-template-hash": "f476958bd"
      },
      "name": "busybox1-f476958bd-hds4w",
      "namespace": "multus",
      "ownerReferences": [
        {
          "apiVersion": "apps/v1",
          "blockOwnerDeletion": true,
          "controller": true,
          "kind": "ReplicaSet",
          "name": "busybox1-f476958bd",
          "uid": "5daf9b52-e1b3-4df7-b5a1-028b48e7fcc0"
        }
      ],
      "resourceVersion": "965176",
      "selfLink": "/api/v1/namespaces/multus/pods/busybox1-f476958bd-hds4w",
      "uid": "0051b85d-9774-4f89-8658-f34065222bf0"
    },

for basic jq,

代码语言:javascript
复制
[root@ip-172-31-103-214 ~]# kubectl get po -o json -n multus|jq -r '.items[] | .spec.volumes'
[
  {
    "name": "test-busybox1-token-f6bdj",
    "secret": {
      "defaultMode": 420,
      "secretName": "test-busybox1-token-f6bdj"
    }
  }
]

我可以切换到yaml格式,然后使用普通的grep。

代码语言:javascript
复制
kubectl get po -o yaml  -n multus|egrep 'mac'|sort -u
"mac": "0a:2d:40:c6:f8:ea",
"mac": "0a:52:8a:62:5d:f4",

谢谢

EN

回答 2

Stack Overflow用户

发布于 2020-05-24 22:47:44

从原始JSON开始,使用jq的-r命令行选项,以下jq过滤器产生如下输出:

代码语言:javascript
复制
.[]
| .metadata.annotations[]
| (fromjson? // empty)
| .[]
| select(has("mac"))
| {mac}

输出:

代码语言:javascript
复制
{"mac":"0a:2d:40:c6:f8:ea"}
{"mac":"0a:52:8a:62:5d:f4"}
{"mac":"0a:2d:40:c6:f8:ea"}
{"mac":"0a:52:8a:62:5d:f4"}
票数 2
EN

Stack Overflow用户

发布于 2020-05-24 23:56:32

请尝试下面的命令,并得到预期的输出。

代码语言:javascript
复制
cat abc.json | jq -r  '.metadata.annotations."k8s.v1.cni.cncf.io/networks-status" | fromjson | .[].mac ' 

abc.json是你儿子的档案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61989556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档