如何识别脚本中的gcloud错误

时间:2018-11-12 07:16:16

标签: google-cloud-platform gcloud

假设我想使用gcloud删除一些我的GCP项目资源。如果我记录了它们的名称,则可以在一个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

我还尝试了在我的gcloud配置中设置show_structured_logs属性。产生的输出仍然不够详细。

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。此方法有效,但存在漏洞,并且如已确认的here一样不可靠。

2 个答案:

答案 0 :(得分:2)

获取您的资源列表,然后再删除任何内容并从列表中删除一个项目。这样您将确定它存在

您可以解析此命令的输出:

gcloud compute instance-templates list

答案 1 :(得分:0)

如果您需要对来自API服务器的答复进行这种控制,我竭诚建议您自己执行RESTful调用。 gcloud只是一个包装,是供CLI使用的,因此,我很危险,这就是它不能提供您所要查找的内容的原因。