Предположим, я хочу удалить некоторые ресурсы из своего проекта GCP, используя gcloud
. Если у меня есть запись их имен, я могу удалить их все в одном скрипте bash / node / python. Проблема в том, что я должен уметь отличать ошибки «ОК» от тех, которые не делают. Например, если я удаляю ресурс, который не существует, gcloud сообщает об ошибке, и у моего кода нет надежного способа определить, что это был 404. В этом случае 404 - это хорошо. Я хотел, чтобы ресурс исчез, и он исчез. Как мне достоверно определить тип ошибки, выдаваемой gcloud?
Я посмотрел на --log-http
, и, хотя он выводит тело ответа об ошибке http, я предполагаю, что нет будущего способа разобрать его.
gcloud compute instance-templates delete trash -q --log-http
...
== body start ==
...
{
"error": {
"errors": [
{
"domain": "global",
"reason": "notFound",
"message": "The resource 'projects/mine/global/instanceTemplates/trash' was not found"
}
],
"code": 404,
"message": "The resource 'projects/mine/global/instanceTemplates/trash' was not found"
}
}
----------------------
ERROR: (gcloud.compute.instance-templates.delete) Could not fetch resource:
- The resource 'projects/mine/global/instanceTemplates/trash' was not found
Я также попытался установить свойство show_structured_logs
в моей конфигурации gcloud. Вывод, который это дает, все еще недостаточно детализирован.
gcloud config set show_structured_logs always
gcloud compute instance-templates delete trash -q
{
"version": "0.0.1",
"verbosity": "ERROR",
"timestamp": "2018-11-12T07:00:51.505Z",
"message": "(gcloud.compute.instance-templates.delete) Could not fetch resource:\n - The resource 'projects/mine/global/instanceTemplates/trash' was not found\n"
}
Мое текущее решение состоит в том, чтобы просто искать ключевые фразы в выводе. Для этого примера я бы искал was not found
. Это работает, но его хакерство и ненадежность, как подтверждено здесь .