gcloud 过滤正则表达式不一致

gcloud filters regex inconsistency

当我 运行 在计算实例上使用相同风格的命令时,它可以正常工作

gcloud compute instances list --filter='name~mysql'

但是,当我运行这个命令时

gcloud dataproc clusters list --filter='clusterName ~ dev'

我收到这个错误

ERROR: (gcloud.dataproc.clusters.list) INVALID_ARGUMENT: Could not parse the filter: ParserException:errors {
  line: 1
  column: 13
  message: "syntax error"
  token: "~"
}

知道过滤器为什么会这样吗?

回答您提出的问题:为什么会这样?因为在前一种情况下,过滤是在客户端完成的(根据gcloud topic filters),而在后一种情况下,过滤是在服务器端完成的。

我们将调查是否可以使他们达成一致。

--filter 标志是一个单一的过滤标志,可以在客户端或服务器端进行解释。在

gcloud compute instances list --filter='name~mysql'

在客户端解释的情况。如果添加 --log-http,您将看到过滤器表达式永远不会在任何 api 请求中发送。另一方面

gcloud dataproc clusters list --filter='clusterName~dev' --log-http

将显示:

==== request start ==== uri: https://dataproc.googleapis.com/v1/projects/YOUR_PROJECT/regions/global/clusters?filter=%27clusterName%7Edev%27&alt=json&pageSize=100 method: GET == headers start == ...

此处的 dataproc 后端 api 无法处理相同的过滤语法。请参阅有关过滤器的 dataproc api 文档:https://cloud.google.com/dataproc/docs/reference/rest/v1/projects.regions.clusters/list

根据那个文档你可以做

gcloud dataproc clusters list --filter='clusterName=dev'

尽管 --filter='clusterName~dev' 语法不应产生错误,但应在此处作为错误报告 https://issuetracker.google.com/issues/new?component=187143&template=800102