Поле ConfigMap
resource data
содержит строку, которая интерпретируется как есть, когда вы запускаете jsonpath
, чтобы выбрать ее через '{.data.cluster-config\.json}'
. Я имею в виду, что используемая вами оболочка будет печатать ее в формате JSON со значением stdout
, хотя в Kubernetes она хранится по-другому. Если вы запустите kubectl get cm cluster-info -n kube-system -o json
и посмотрите на поле data
, оно может выглядеть примерно так:
"data": {
"cluster-config.json": "{\n \"cluster_id\": \"xxx\",\n \"cluster_name\": \"prod-yyy-mmm\",\n \"cluster_type\": \"rrr\",\n \"cluster_pay_tier\": \"vvv\",\n \"datacenter\": \"cse\",\n \"account_id\": \"456777\",\n \"created\": \"2018-06-32323dffdf:35:48+0000\"\n}\n"
}
Вы не сможете получить доступ к "полям" в этой строке с помощью jsonpath
, поскольку она на самом деле не является частью ConfigMap
ресурса API полей.
Вы можете попытаться использовать второй инструмент для его извлечения, используя jq
, процессор JSON командной строки. Этот инструмент интерпретирует вывод jsonpath
как JSON на лету и анализирует его соответствующим образом.
* * 1 022 Пример: * 1 023 *
kubectl get cm cluster-info -n kube-system -o jsonpath='{.data.cluster-config\.json}' | jq '.cluster_id'
"xxx"
При установке, например jq
победить любые цели, я бы порекомендовал использовать комбинацию уже доступных инструментов (если вы работаете в Linux), таких как grep
, awk
и sed
:
kubectl get cm cluster-info -n kube-system -o jsonpath='{.data.cluster-config\.json}' | grep cluster_id | awk '{ print $2 }' | sed -e 's/"//' -e 's/",//'
xxx