2016-07-30 42 views
1

我想從這個JSON獲得價值提取相關的值

{ 
    "kind": "List", 
    "apiVersion": "v1", 
    "metadata": {}, 
    "items": [ 
    { 
     "kind": "Pod", 
     "apiVersion": "v1", 
     "metadata": { 
     "name": "provisioner-secrets-1750468340-ei8sl", 
     "generateName": "provisioner-secrets-1750468340-", 
     "namespace": "default", 
     "selfLink": "/api/v1/namespaces/default/pods/provisioner-secrets-1750468340-ei8sl", 
     "uid": "8d2ac8e4-5642-11e6-b139-72f9d49a4327", 
     "resourceVersion": "1473", 
     "creationTimestamp": "2016-07-30T10:44:11Z", 
     "labels": { 
      "pod-template-hash": "1750468340", 
      "run": "git-sync" 
     }, 
     "annotations": { 
      "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"default\",\"name\":\"provisioner-secrets-1750468340\",\"uid\":\"8d2904ba-5642-11e6-b139-72f9d49a4327\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"1438\"}}\n" 
     } 
     }, 
     "spec": { 
     "volumes": [ 
      { 
      "name": "markdown", 
      "emptyDir": {} 
      }, 
      { 
      "name": "klucze", 
      "secret": { 
       "secretName": "klucze" 
      } 
      }, 
      { 
      "name": "default-token-xjc9q", 
      "secret": { 
       "secretName": "default-token-xjc9q" 
      } 
      } 
     ], 
     "containers": [ 
      { 
      "name": "git-sync", 
      "image": "lukaszbielinski/git-sync:0.5", 
      "env": [ 
       { 
       "name": "GIT_SYNC_REPO", 
       "value": "https://github.com/lukasz-bielinski/test-secrets" 
       }, 
       { 
       "name": "GIT_SYNC_WAIT", 
       "value": "10" 
       }, 
       { 
       "name": "GIT_SYNC_DEST", 
       "value": "/git" 
       } 
      ], 
      "resources": {}, 
      "volumeMounts": [ 
       { 
       "name": "markdown", 
       "mountPath": "/git" 
       }, 
       { 
       "name": "klucze", 
       "mountPath": "/root/.ssh/klucze" 
       }, 
       { 
       "name": "default-token-xjc9q", 
       "readOnly": true, 
       "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" 
       } 
      ], 
      "terminationMessagePath": "/dev/termination-log", 
      "imagePullPolicy": "IfNotPresent" 
      }, 
      { 
      "name": "secprov", 
      "image": "lukaszbielinski/kubectl-image:0.19-secrets", 
      "resources": {}, 
      "volumeMounts": [ 
       { 
       "name": "markdown", 
       "mountPath": "/srcsecrets" 
       }, 
       { 
       "name": "default-token-xjc9q", 
       "readOnly": true, 
       "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" 
       } 
      ], 
      "terminationMessagePath": "/dev/termination-log", 
      "imagePullPolicy": "Always" 
      } 
     ], 
     "restartPolicy": "Always", 
     "terminationGracePeriodSeconds": 30, 
     "dnsPolicy": "ClusterFirst", 
     "serviceAccountName": "default", 
     "serviceAccount": "default", 
     "nodeName": "minikubevm", 
     "securityContext": {} 
     }, 
     "status": { 
     "phase": "Running", 
     "conditions": [ 
      { 
      "type": "Initialized", 
      "status": "True", 
      "lastProbeTime": null, 
      "lastTransitionTime": "2016-07-30T10:44:11Z" 
      }, 
      { 
      "type": "Ready", 
      "status": "True", 
      "lastProbeTime": null, 
      "lastTransitionTime": "2016-07-30T10:44:31Z" 
      }, 
      { 
      "type": "PodScheduled", 
      "status": "True", 
      "lastProbeTime": null, 
      "lastTransitionTime": "2016-07-30T10:44:11Z" 
      } 
     ], 
     "hostIP": "192.168.122.230", 
     "podIP": "172.17.0.10", 
     "startTime": "2016-07-30T10:44:11Z", 
     "containerStatuses": [ 
      { 
      "name": "git-sync", 
      "state": { 
       "running": { 
       "startedAt": "2016-07-30T10:44:12Z" 
       } 
      }, 
      "lastState": {}, 
      "ready": true, 
      "restartCount": 0, 
      "image": "lukaszbielinski/git-sync:0.5", 
      "imageID": "docker://sha256:50f4c3009cd7072cb52d0edc5374ad973d7619ead7063482c4102fa230d16ce6", 
      "containerID": "docker://3d8f44f2c1cd8139fdf23660e5c7514d37ba5e39c739087f12defcfcd0a12f6d" 
      }, 
      { 
      "name": "secprov", 
      "state": { 
       "running": { 
       "startedAt": "2016-07-30T10:44:31Z" 
       } 
      }, 
      "lastState": {}, 
      "ready": true, 
      "restartCount": 0, 
      "image": "lukaszbielinski/kubectl-image:0.19-secrets", 
      "imageID": "docker://sha256:6ebf833942e81d24d0bbc2f3e816f7620db979182ccf81a9edaf97488b512726", 
      "containerID": "docker://c1837b472c0a8123c244c7e7c5b4886a85e8607e8172271447024aa647a0a564" 
      } 
     ] 
     } 
    } 
    ] 
} 

的事情,我知道:

"secretName": "klucze"  

的事情,我想提取

"name": "provisioner-secrets-1750468340-ei8sl"  

我試過

.items[] | .spec | .volumes[] | .secret | select(.secretName=="klucze")  

,但我不知道如何從

.items[] | .metadata | .name  

得到相關值請建議我怎麼能解決這個問題

回答

2

你知道如何讓你正在尋找相應的名稱,只是在那裏添加一個select您需要的條件。幸運的是,您的狀況涉及您正在搜索的項目,而不是另一個不相關的對象。

$ jq --arg secret 'klucze' \ 
'.items[] | select(.spec.volumes[].secret.secretName == $secret).metadata.name' input.json 
+0

它的工作完美無缺,謝謝! – lukasz