Получить документы для ресурсов (например, объяснить kubectl) через Python

Я хотел бы написать небольшую программу, похожую на kubectl explain.

Я использую клиент python.

С помощью kubectl explain pods -v=8 я вижу, какие API вызываются.

URL-адрес /openapi/v2

Я пробовал это:

from kubernetes import client, config

# Configs can be set in Configuration class directly or using helper utility
from kubernetes.client import ApiClient

config.load_kube_config()

print(ApiClient().call_api('/openapi/v2', method='GET'))

Но результат пустой:

(None, 200, HTTPHeaderDict({'Accept-Ranges': 'bytes', 'Audit-Id': '5f025f01-cab9-4816-8579-751b47604275', 'Cache-Control': 'no-cache, private', 'Content-Length': '3315308', 'Content-Type': 'text/plain; charset=utf-8', 'Etag': '"194A5412D92C8239FAA388BD61A2729940609093EE00703602A983C97E2D7FD9FFA0E25F481A2659782EC80339F6A25CD9FD414B8D652409E1B521BB4F53E5DB"', 'Last-Modified': 'Thu, 31 Mar 2022 17:51:05 GMT', 'Vary': 'Accept-Encoding, Accept', 'X-Kubernetes-Pf-Flowschema-Uid': 'f70aa7db-e8d7-4690-becf-40ac57d88c1f', 'X-Kubernetes-Pf-Prioritylevel-Uid': '5c900157-e070-46c3-b774-a77dfa6128bc', 'Date': 'Sat, 02 Apr 2022 21:29:56 GMT'}))

Как я могу получить хорошие документы, которые kubectl explain показывает через Python?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
98
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы уже получаете данные, просто при их обработке возникает какая-то ошибка :) Чтобы отключить постобработку, вам нужно передать аргумент _preload_content=False в call_api
Тогда код будет выглядеть примерно так:

import json
from kubernetes import client, config

# Configs can be set in Configuration class directly or using helper utility
from kubernetes.client import ApiClient

config.load_kube_config()

apiClient = ApiClient()
answer = apiClient.call_api('/openapi/v2', method='GET', _preload_content=False)
data = json.loads(answer[0].data)
print(data)

Если вы хотите получить только описание, вы можете использовать curl с Bearer Auth следующим образом: https://blog.ronnyvdb.net/2019/08/07/howto-curl-the-kubernetes-api-сервер

 curl -s $APISERVER/openapi/v2 --header "Authorization: Bearer $TOKEN" --cacert ca.crt

Или с TSL-аутентификацией:

 curl -s $APISERVER/openapi/v2 --cert client.crt --key client.key --cacert ca.crt

После этого можно использовать инструменты для работы с описанием openAPI: https://openapi.tools

Например, загрузите json в https://mrin9.github.io/OpenAPI-просмотрщик и наслаждайтесь

Другие вопросы по теме