You are viewing documentation for Kubernetes version: v1.23

Kubernetes v1.23 документация больше не поддерживается. Версия, которую вы сейчас просматриваете, является статической. Актуальную документацию вы можете найти последняя версия.

Поддержка JSONPath

Kubectl поддерживает шаблон JSONPath.

Шаблон JSONPath состоит из выражений JSONPath, заключенных в фигурные скобки {}. Kubectl использует JSONPath-выражения для фильтрации по определенным полям в JSON-объекте и форматирования вывода. В дополнение к оригинальному синтаксису шаблона JSONPath, допустимы следующие функции и синтаксис:

  1. Внутри выражений JSONPath текстовые значения заключайте в двойные кавычки.
  2. Используйте операторы range, end, конечные операторы для перебора списков.
  3. Используйте отрицательные индексы срезов для перехода на предыдущий элемент в списке. Отрицательные индексы не "зацикливаются" в списке и работают пока истинно выражение -index + listLength >= 0.

Все примеры ниже будут ориентироваться на следующий JSON-объект:

{
  "kind": "List",
  "items":[
    {
      "kind":"None",
      "metadata":{"name":"127.0.0.1"},
      "status":{
        "capacity":{"cpu":"4"},
        "addresses":[{"type": "LegacyHostIP", "address":"127.0.0.1"}]
      }
    },
    {
      "kind":"None",
      "metadata":{"name":"127.0.0.2"},
      "status":{
        "capacity":{"cpu":"8"},
        "addresses":[
          {"type": "LegacyHostIP", "address":"127.0.0.2"},
          {"type": "another", "address":"127.0.0.3"}
        ]
      }
    }
  ],
  "users":[
    {
      "name": "myself",
      "user": {}
    },
    {
      "name": "e2e",
      "user": {"username": "admin", "password": "secret"}
    }
  ]
}
Функция Описание Пример Результат
text обычный текст kind is {.kind} kind is List
@ текущий объект {@} то же, что и ввод
. или [] оператор выбора по ключу {.kind}, {['kind']} или {['name\.type']} List
.. рекурсивный спуск {..name} 127.0.0.1 127.0.0.2 myself e2e
* шаблон подстановки. Получение всех объектов {.items[*].metadata.name} [127.0.0.1 127.0.0.2]
[start:end:step] оператор индексирования {.users[0].name} myself
[,] оператор объединения {.items[*]['metadata.name', 'status.capacity']} 127.0.0.1 127.0.0.2 map[cpu:4] map[cpu:8]
?() фильтрация {.users[?(@.name=="e2e")].user.password} secret
range, end перебор списка {range .items[*]}[{.metadata.name}, {.status.capacity}] {end} [127.0.0.1, map[cpu:4]] [127.0.0.2, map[cpu:8]]
'' интерпретируемая в кавычках строка {range .items[*]}{.metadata.name}{'\t'}{end} 127.0.0.1 127.0.0.2

Примеры использования kubectl и JSONPath-выражений:

kubectl get pods -o json
kubectl get pods -o=jsonpath='{@}'
kubectl get pods -o=jsonpath='{.items[0]}'
kubectl get pods -o=jsonpath='{.items[0].metadata.name}'
kubectl get pods -o=jsonpath="{.items[*]['metadata.name', 'status.capacity']}"
kubectl get pods -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.startTime}{"\n"}{end}'
Изменено March 27, 2022 at 12:47 PM PST: kubectl_docs_fixes (482bfee980)