jq: error: syntax error, unexpected if, while checking for a object to be present and if not the adding default value
jq: error: syntax error, unexpected if, while checking for a object to be present and if not the adding default value
获取错误
jq: error: syntax error, unexpected if (Unix shell quoting issues?) at <top-level> while parsing kubernetes kubectl command,
kubectl get pv -o=json | jq -c '.items[] | {name: .metadata.name, claimName: .spec | if has("claimRef") then .claimRef.name else empty end }'
尝试获取具有 PVC 的 PV,如果没有 PVC,则可能为空。
对于它构建名称映射及其各自的 PVC,否则为空或 null。
下面是 jq 命令的示例输入或命令的输出 kubectl get pv -o=json
{
"apiVersion": "v1",
"items": [{
"apiVersion": "v1",
"kind": "PersistentVolume",
"metadata": {
"annotations": {
"meta.helm.sh/release-name": "",
"meta.helm.sh/release-namespace": ""
},
"creationTimestamp": "",
"finalizers": [
""
],
"labels": {
"app.kubernetes.io/managed-by": ""
},
"name": "",
"resourceVersion": "",
"uid": ""
},
"spec": {
"accessModes": [
"ReadWriteMany"
],
"capacity": {
"storage": ""
},
"claimRef": {
"apiVersion": "",
"kind": "",
"name": "",
"namespace": "",
"resourceVersion": "",
"uid": ""
},
"csi": {
"driver": "",
"volumeHandle": ""
},
"persistentVolumeReclaimPolicy": "",
"volumeMode": ""
},
"status": {
"phase": ""
}
},
{
"apiVersion": "v1",
"kind": "PersistentVolume",
"metadata": {
"annotations": {
"meta.helm.sh/release-name": "",
"meta.helm.sh/release-namespace": ""
},
"creationTimestamp": "",
"finalizers": [
""
],
"labels": {
"app.kubernetes.io/managed-by": ""
},
"name": "",
"resourceVersion": "",
"uid": ""
},
"spec": {
"accessModes": [
"ReadWriteMany"
],
"capacity": {
"storage": ""
},
"claimRef": {
"apiVersion": "",
"kind": "",
"name": "",
"namespace": "",
"resourceVersion": "",
"uid": ""
},
"csi": {
"driver": "",
"volumeHandle": ""
},
"persistentVolumeReclaimPolicy": "",
"volumeMode": ""
},
"status": {
"phase": ""
}
}
],
"kind": "List",
"metadata": {
"resourceVersion": "",
"selfLink": ""
}
}
为了数据安全,删除了数据,只保留了密钥
请帮忙
将 claimName
字段的值括起来:
{
name: .metadata.name,
claimName: (.spec | if has("claimRef") then .claimRef.name else empty end)
}
根据示例的简化程度,您可以考虑将 if
语句减少为:
{
name: .metadata.name,
claimName: (.spec.claimRef.name? // empty)
}
请注意,在这两种情况下,如果相应的测试失败,不仅 .claimName
整个对象都会消失。
获取错误
jq: error: syntax error, unexpected if (Unix shell quoting issues?) at <top-level> while parsing kubernetes kubectl command,
kubectl get pv -o=json | jq -c '.items[] | {name: .metadata.name, claimName: .spec | if has("claimRef") then .claimRef.name else empty end }'
尝试获取具有 PVC 的 PV,如果没有 PVC,则可能为空。 对于它构建名称映射及其各自的 PVC,否则为空或 null。
下面是 jq 命令的示例输入或命令的输出 kubectl get pv -o=json
{
"apiVersion": "v1",
"items": [{
"apiVersion": "v1",
"kind": "PersistentVolume",
"metadata": {
"annotations": {
"meta.helm.sh/release-name": "",
"meta.helm.sh/release-namespace": ""
},
"creationTimestamp": "",
"finalizers": [
""
],
"labels": {
"app.kubernetes.io/managed-by": ""
},
"name": "",
"resourceVersion": "",
"uid": ""
},
"spec": {
"accessModes": [
"ReadWriteMany"
],
"capacity": {
"storage": ""
},
"claimRef": {
"apiVersion": "",
"kind": "",
"name": "",
"namespace": "",
"resourceVersion": "",
"uid": ""
},
"csi": {
"driver": "",
"volumeHandle": ""
},
"persistentVolumeReclaimPolicy": "",
"volumeMode": ""
},
"status": {
"phase": ""
}
},
{
"apiVersion": "v1",
"kind": "PersistentVolume",
"metadata": {
"annotations": {
"meta.helm.sh/release-name": "",
"meta.helm.sh/release-namespace": ""
},
"creationTimestamp": "",
"finalizers": [
""
],
"labels": {
"app.kubernetes.io/managed-by": ""
},
"name": "",
"resourceVersion": "",
"uid": ""
},
"spec": {
"accessModes": [
"ReadWriteMany"
],
"capacity": {
"storage": ""
},
"claimRef": {
"apiVersion": "",
"kind": "",
"name": "",
"namespace": "",
"resourceVersion": "",
"uid": ""
},
"csi": {
"driver": "",
"volumeHandle": ""
},
"persistentVolumeReclaimPolicy": "",
"volumeMode": ""
},
"status": {
"phase": ""
}
}
],
"kind": "List",
"metadata": {
"resourceVersion": "",
"selfLink": ""
}
}
为了数据安全,删除了数据,只保留了密钥 请帮忙
将 claimName
字段的值括起来:
{
name: .metadata.name,
claimName: (.spec | if has("claimRef") then .claimRef.name else empty end)
}
根据示例的简化程度,您可以考虑将 if
语句减少为:
{
name: .metadata.name,
claimName: (.spec.claimRef.name? // empty)
}
请注意,在这两种情况下,如果相应的测试失败,不仅 .claimName
整个对象都会消失。