website/content/ru/docs/reference/kubectl/jsonpath.md

102 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Поддержка JSONPath
content_template: templates/concept
weight: 25
---
{{% capture overview %}}
Kubectl поддерживает шаблон JSONPath.
{{% /capture %}}
{{% capture body %}}
Шаблон JSONPath состоит из выражений JSONPath, заключенных в фигурные скобки {}.
Kubectl использует JSONPath-выражения для фильтрации по определенным полям в JSON-объекте и форматирования вывода.
В дополнение к оригинальному синтаксису шаблона JSONPath, допустимы следующие функции и синтаксис:
1. Внутри выражений JSONPath текстовые значения заключайте в двойные кавычки.
2. Используйте операторы `range`, `end`, конечные операторы для перебора списков.
3. Используйте отрицательные индексы срезов для перехода на предыдущий элемент в списке. Отрицательные индексы не "зацикливаются" в списке и работают пока истинно выражение `-index + listLength >= 0`.
{{< note >}}
- Оператор `$` необязателен, поскольку по умолчанию выражение всегда начинается с корневого объекта.
- Объект результата выводиться через функцию String().
{{< /note >}}
Все примеры ниже будут ориентироваться на следующий JSON-объект:
```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-выражений:
```shell
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}'
```
{{< note >}}
В Windows нужно заключить в _двойные_ кавычки JSONPath-шаблон, который содержит пробелы (не в одинарные, как в примерах выше для bash). Таким образом, любые литералы в таких шаблонов нужно оборачивать в одинарные кавычки или экранированные двойные кавычки. Например:
```cmd
kubectl get pods -o=jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.status.startTime}{'\n'}{end}"
kubectl get pods -o=jsonpath="{range .items[*]}{.metadata.name}{\"\t\"}{.status.startTime}{\"\n\"}{end}"
```
{{< /note >}}
{{% /capture %}}