как определить ошибки gcloud в скриптах - PullRequest
0 голосов
/ 12 ноября 2018

Предположим, я хочу удалить некоторые ресурсы из своего проекта 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. Это работает, но его хакерство и ненадежность, как подтверждено здесь .

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Если вам нужен такой контроль над ответами, приходящими с сервера API, я искренне рекомендую вам выполнять вызовы RESTful самостоятельно.gcloud - это просто оболочка, она предназначена для использования с CLI, поэтому я рискну, поэтому и не предлагаю вам то, что вы ищете.

0 голосов
/ 12 ноября 2018

Получите список своих ресурсов, прежде чем что-либо удалять, и удалите элемент из списка. Таким образом, вы точно будете знать, что он существует

Вы можете проанализировать вывод этой команды:

gcloud compute instance-templates list
...