Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 如何从对象中提取Kubernestes PODS mac地址_Kubernetes_Annotations_Jq - Fatal编程技术网

Kubernetes 如何从对象中提取Kubernestes PODS mac地址

Kubernetes 如何从对象中提取Kubernestes PODS mac地址,kubernetes,annotations,jq,Kubernetes,Annotations,Jq,我正在尝试使用json过滤器中的kubectl get po或jq提取metadata.annotations下的mac或ips地址。其他对象很容易操作以获取这些值 kubectl获取po-o json-n multus | jq-r.items 在注释下,有重复的CNI信息,但没有问题。我喜欢使用jq提取那些MAC地址。这件事似乎很棘手 [ { "apiVersion": "v1", "kind": "Pod", "metadata": { "annot

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

kubectl获取po-o json-n multus | jq-r.items 在注释下,有重复的CNI信息,但没有问题。我喜欢使用jq提取那些MAC地址。这件事似乎很棘手

[
  {
    "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"
    },

对于基本jq

我可以将get pod切换为yaml格式,然后使用普通的grep cmd

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",

感谢

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

.[]
| .metadata.annotations[]
| (fromjson? // empty)
| .[]
| select(has("mac"))
| {mac}
输出:

{"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"}

请尝试下面的命令,并应获得预期的输出

cat abc.json | jq -r  '.metadata.annotations."k8s.v1.cni.cncf.io/networks-status" | fromjson | .[].mac ' 
其中abc.json是您的子文件。

您需要在问题中提供答案。我不认为任何人会读到这些,请抛开不必要的细节,提出一个简单、清晰、实用、可回答的问题。谢谢
cat abc.json | jq -r  '.metadata.annotations."k8s.v1.cni.cncf.io/networks-status" | fromjson | .[].mac '