假设我想使用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一样不可靠。
答案 0 :(得分:2)
获取您的资源列表,然后再删除任何内容并从列表中删除一个项目。这样您将确定它存在
您可以解析此命令的输出:
gcloud compute instance-templates list
答案 1 :(得分:0)
如果您需要对来自API服务器的答复进行这种控制,我竭诚建议您自己执行RESTful调用。 gcloud
只是一个包装,是供CLI使用的,因此,我很危险,这就是它不能提供您所要查找的内容的原因。