Концепция
Операции и статусы
Многие операции в ZennoHosting асинхронны. Успешный write request часто означает только то, что сервер принял работу в обработку, а не то, что VM, сеть, backup или forwarding rule уже достигли финального состояния, необходимого вашему workflow.
Что означает accepted
202 Acceptedозначает, что запрос принят в обработку.commandIdидентифицирует принятую команду, а не финальное состояние ресурса.После write request клиент должен читать затронутый ресурс и проверять его текущие state fields.
Для VM поля
operationStatusиbootStatusособенно важны до запуска follow-up automation.
- 1
Отправьте mutating request
Create, update, restore, attach и forwarding operations часто стартуют как асинхронная работа, а не как мгновенный переход состояния.
- 2
Сохраните identifiers из accepted response
Сохраните вернувшийся
commandIdи identifiers ресурсов, которые уже были известны из контекста запроса. - 3
Прочитайте затронутый ресурс
Читайте состояние VM, сети, backup или public IP через соответствующий resource endpoint, а не делайте вывод об успехе только по write response.
- 4
Интерпретируйте поля состояния
Используйте status-related поля вроде
operation,operationStatus,bootStatusи resource-specific statuses, чтобы понять, безопасно ли переходить к следующему действию.
Где это особенно важно
- Создание VM, start, stop и reboot.
- Создание private network и attach/detach VM в сети.
- Создание backup и restore.
- Создание, обновление и удаление правил port forwarding.
Практическое правило
Стройте automation вокруг наблюдаемого состояния ресурса, а не вокруг write acknowledgements. В ZennoHosting accepted response говорит, что работа началась. Resource representation говорит, завершилась ли она.
Связанные endpoint
/projects/{projectId}/vmsВернуть accepted command для provisioning VM.
/projects/{projectId}/vms/{vmId}Прочитать operation и boot state VM после async operation.
/projects/{projectId}/networksСоздать сеть асинхронно.
/projects/{projectId}/vms/{vmId}/backups/{backupId}/restoreЗапустить восстановление VM из выбранного backup.
/projects/{projectId}/public-ips/{publicIpId}/port-forwardsСоздать внешнее forwarding rule асинхронно.