Диапазон JSONPath не работает при использовании kubectl - PullRequest
0 голосов
/ 01 марта 2019

Я обращаюсь к Kubernetes через инструмент CLI kubectl и пытаюсь получить список всех имен контекста, по одному на строку.

Я знаю, что JSONPath можно использовать для извлечения и форматированияконкретный вывод.Я получаю очень близко к тому, что я хочу с

kubectl config view -o=jsonpath="{.contexts[*].name}"

, но это помещает все имена в одну строку.Я пытаюсь использовать range, чтобы перечислить все имена, разделенные новыми строками:

kubectl config view -o=jsonpath='{range .contexts[*]}{.name}{"\n"}{end}'

Но это просто дает мне ошибку:

error: unexpected arguments: [.contexts[*]}{.name}{"\n"}{end}]
See 'kubectl config view -h' for help and examples.

Я просмотрел kubectl документация и то, что я делаю, действительно похоже на https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/#list-containers-by-pod,, где команда

kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\
sort

, но я не вижу, в чем дело.

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Я понял это.Я использовал сценарий @ ahmetb kubectl-aliases , который работает без проблем, но одно из предложений в README было следующим:

Распечатайте полную команду перед ее запуском: Добавьте это в ваш файл .bashrc или .zshrc:

function kubectl() { echo "+ kubectl $@"; command kubectl $@; }

У меня было объявление этой функции в моем .bashrc, и оно удаляло кавычки для моего jsonpath аргументКак только я закомментировал это объявление и открыл новую оболочку, команда работала правильно.

0 голосов
/ 01 марта 2019

Ваша команда работает для меня в kubectl 1.9.2

Если она все еще не работает, вы можете использовать tr в bash для замены пробелов новыми строками:

kubectl config view -o=jsonpath="{.contexts[*].name}" | tr " " "\n" 
...