#python #google-cloud-platform #virtual-machine #google-compute-engine
#python #google-облачная платформа #виртуальная машина #google-compute-engine
Вопрос:
Я не могу найти ни одного примера кода или соответствующей документации по библиотеке python для Google Cloud
Хотите перезапустить управляемые группы экземпляров всех виртуальных машин через облачную функцию.
Для перечисления экземпляров я использую что-то вроде этого
import googleapiclient.discovery
def list_instances(compute, project, zone):
result = compute.instances().list(project=project, zone=zone).execute()
return result['items'] if 'items' in result else None
в файле требований у меня есть
google-api-python-client==2.31.0
google-auth==2.3.3
google-auth-httplib2==0.1.0
Из командной строки это возможно с помощью SDK ->
https://cloud.google.com/sdk/gcloud/reference/compute/instance-groups/managed/rolling-action/restart
gcloud compute instance-groups managed rolling-action restart NAME [--max-unavailable=MAX_UNAVAILABLE] [--region=REGION | --zone=ZONE] [GCLOUD_WIDE_FLAG …]
Но на python я не могу написать какой-либо код.
Комментарии:
1. Вы проверили здесь github.com/googleapis/google-cloud-python Клиент Google api python предназначен для доступа к API-интерфейсам обнаружения. Я не думаю, что облачный клиент является частью этого.
2. также пробовал эту библиотеку, как написать список групп экземпляров или перезапустить, документации нет
Ответ №1:
Это неполный ответ, поскольку документы Python для меня довольно нечитабельны.
Просматривая gcloud cli
код (для которого я не смог найти официальное репозиторий, поэтому я посмотрел здесь), команда перезапуска запускается чем-то, называемым «минимальным действием».
minimal_action = (client.messages.InstanceGroupManagerUpdatePolicy.
MinimalActionValueValuesEnum.RESTART)
В документах Python есть ссылки на эти поля в методе applyUpdatesToInstances .
Поэтому я думаю, что соответствующий код чем-то похож на:
compute.instanceGroupManagers().applyUpdatesToInstances(
project=project,
zone=zone,
instanceGroupManager='NAME',
body={"allInstances": True, "minimalAction": "RESTART"},
)
Для тела может быть или не быть подходящего объекта Python, документы неясны.
И результат, похоже, является каким-то объектом Operation, но я не знаю, есть ли execute()
метод или нет.
Комментарии:
1. Обратите внимание, что метод applyUpdatesToInstances перезапустит экземпляры в MIG, но не поочередно (он будет выполнять их все сразу), что отличается от команды gcloud, на которую ссылается OP.
Ответ №2:
gcloud compute instance-groups managed rolling-action
что синтаксический сахар выполняет две вещи:
- Он включает упреждающее средство обновления, устанавливая соответствующую политику обновления на ресурсе InstanceGroupManager
- И он изменяет имя версии на том же ресурсе, чтобы запустить обновление.
Сравните вкладки gcloud и API, чтобы получить представление.
К сожалению, я неграмотен в Python, поэтому я не могу перевести его в код Python:(.
Ответ №3:
Используя документацию, предоставленную @Grzenio, используйте patch()
метод для перезапуска группы экземпляров. Смотрите Документацию по исправлению, чтобы проверить его параметры.
Это можно написать на python, используя приведенный ниже код. Я предоставил необходимые параметры project
, zone
, instanceGroupManager
и body
. Значение body
взято из примера в документации.
import googleapiclient.discovery
import json
project = 'your-project-id'
zone = 'us-central1-a' # the zone of your instance group
instanceGroupManager = 'instance-group-1' # instance group name
body = {
"updatePolicy": {
"minimalAction": "RESTART",
"type": "PROACTIVE"
},
"versions": [{
"instanceTemplate": "global/instanceTemplates/instance-template-1",
"name": "v2"
}]
}
compute = googleapiclient.discovery.build('compute', 'v1')
rolling_restart = compute.instanceGroupManagers().patch(
project=project,
zone=zone,
instanceGroupManager=instanceGroupManager,
body=body
)
restart_operation = rolling_restart.execute() # execute the request
print(json.dumps(restart_operation,indent=2))
Это вернет объект operation, и группа экземпляров должна быть перезапущена в непрерывном режиме:
{
"id": "3206367254887659944",
"name": "operation-1638418246759-5d221f9977443-33811aed-eed3ee88",
"zone": "https://www.googleapis.com/compute/v1/projects/your-project-id/zones/us-central1-a",
"operationType": "patch",
"targetLink": "https://www.googleapis.com/compute/v1/projects/your-project-id/zones/us-central1-a/instanceGroupManagers/instance-group-1",
"targetId": "810482163278776898",
"status": "RUNNING",
"user": "serviceaccountused@your-project-id.iam.gserviceaccount.com",
"progress": 0,
"insertTime": "2021-12-01T20:10:47.654-08:00",
"startTime": "2021-12-01T20:10:47.670-08:00",
"selfLink": "https://www.googleapis.com/compute/v1/projects/your-project-id/zones/us-central1-a/operations/operation-1638418246759-5d221f9977443-33811aed-eed3ee88",
"kind": "compute#operation"
}
Комментарии:
1. @GauravTomar Я предлагаю вам открыть новый вопрос, касающийся таргетинга на неуправляемые группы экземпляров, поскольку исходный вопрос предназначен для управляемых групп экземпляров.
2. @GauravTomar если это ответило на ваш первоначальный вопрос, пожалуйста, подумайте о том, чтобы принять его, щелкнув значок проверки с левой стороны. Это поможет другим членам сообщества, если они столкнутся с той же проблемой.