Google Compute Engine API - 使用标签/标签过滤实例或其他列表

pno*_*nak 7 google-compute-engine

使用gcloud命令行工具,我可以这样做:

$ gcloud compute instances list --filter='tags.items:development'
Run Code Online (Sandbox Code Playgroud)

文档 ü 牛逼,在要求:." ..你还可以过滤嵌套字段例如,你可以对已在scheduling.automaticRestart字段设置为true的实例过滤器中使用的过滤嵌套领域利用标签根据标签值组织和搜索结果." 但是没有提供任何示例,因此目前尚不清楚人们是如何实现这一目标的.

我试过labels.development eq *.*,labels eq *development*,labels:development等.我也尝试的命令行客户端的详细程度设置info,并通过输出看,还有的是去从API的监控请求Compute Engine的Web控制台,但是都没有让我到任何地方.

Chr*_*ley 6

使用正则表达式过滤器查找标签

我正在努力解决同样的问题,但我认为正则表达式可以解决问题。

我有许多带有多个标签的实例,但我可以使用“~”运算符搜索所有标签,例如查找带有生产标签的所有服务器:

gcloud compute instances list --filter='tags.items~^production$'
Run Code Online (Sandbox Code Playgroud)

对于许多服务器来说,“生产”标签是tags.items 中的第三个条目,但正则表达式可以找到它。

这似乎有效,但我找不到任何明确说明它应该有效的文档。最近的是关于主题过滤器的部分,其中提到了这一点

key ~ value 如果 key 与 RE(正则表达式)模式值匹配,则为 True。


您还可以搜索多个标签

gcloud compute instances list --filter='tags.items~^production$ AND tags.items~^european$'
Run Code Online (Sandbox Code Playgroud)

这将找到所有带有“生产”和“欧洲”两个标签的服务器


标签 v 自定义元数据

如果您想要比标签更灵活的东西(只能存在或缺失),您可以将您自己的自定义多值元数据附加到实例(通过 UI、命令行或 API)。然后您可以搜索该项目的特定值。

例如,假设我有不同的实例支持不同品牌的电子商务,我可以将自定义“品牌”元数据项附加到每个服务器,然后通过..找到运行我的“可口可乐”品牌的所有服务器。

gcloud compute instances list --filter="metadata.items.key['brand']['value']='Coca-Cola'"
Run Code Online (Sandbox Code Playgroud)

...以及我的“百事可乐”服务器...

gcloud compute instances list --filter="metadata.items.key['brand']['value']='Pepsi Cola'"
Run Code Online (Sandbox Code Playgroud)


使用正则表达式过滤器查找元数据

您可能已经猜到了这一点,但是正则表达式运算符也可以与元数据过滤器一起使用,因此您可以执行以下操作

gcloud 计算实例列表 --filter="metadata.items.key['brand']['value']~'Cola'"