Получить статус инициализации кластера облачных контейнеров Google с помощью клиента API Python

Я создаю кластер движка контейнера с помощью API-клиента Python для облачной платформы Google. Я успешно завершил создание контейнера. Теперь мне нужно применить некоторые конфигурации yaml, но перед применением любых конфигураций kubernetes yaml необходимо подготовить кластер, иначе API-интерфейс kubernetes недоступен, Мне нужно сделать и то, и другое (создание контейнера и применение конфигураций yaml) в одном запросе. Как я могу получить статус предоставления кластера с помощью API?

Вот что я попробовал:

После создания кластера:из views.py:

print('Fetching Cluster configs ....')
cc = subprocess.call(
                'gcloud container clusters get-credentials ' + deployment.deploymentName.lower() + ' --zone ' + deployment.region + ' --project ' + deployment.project,
                shell=True)
print(cc)
while cc == 1:
     cc = subprocess.call(
                    'gcloud container clusters get-credentials ' + deployment.deploymentName.lower() + ' --zone ' + deployment.region + ' --project ' + deployment.project,
                    shell=True)
     print(cc)

Помоги мне, пожалуйста!

Заранее спасибо!

2 ответа

Решение

Вот как я делаю в своем коде:

"""
If you have a credentials issue, run:

gcloud beta auth application-default login

"""
import time

import googleapiclient.discovery

service = googleapiclient.discovery.build('container', 'v1')
clusters_resource = service.projects().zones().clusters()
operations_resource = service.projects().zones().operations()


def create_cluster(project_id, zone, config, async=False):
    req = clusters_resource.create(projectId=project_id, zone=zone, body=config)
    operation = req.execute()

    if async:
        return

    while operation['status'] == 'RUNNING':
        time.sleep(1)
        req = operations_resource.get(projectId=project_id, zone=zone, operationId=operation['name'])
        operation = req.execute()

    return operation['status'] == 'DONE'

То, что вы ищете, - это статус операции, идентификатор которой возвращается из вызова create cluster. Затем вам нужно получить операцию (через API-интерфейс контейнера, а не API-интерфейс вычисления) и проверить состояние операции, чтобы убедиться, что она ГОТОВА. Как только это будет сделано, вы можете определить, произошла ли ошибка, посмотрев сообщение о состоянии в операции. Если он не указан, вызов API create cluster успешно выполнен. Если он не пустой, то вызов не удался, и в сообщении о состоянии будет указано, почему. После завершения операции по созданию кластера вызов get-credentials будет успешным.