【问题标题】:Google Compute Engine API - Filtering Instances or Other Lists Using Labels / TagsGoogle Compute Engine API - 使用标签/标签过滤实例或其他列表
【发布时间】:2016-09-13 06:03:45
【问题描述】:

使用gcloud 命令行工具我可以做到:

$ gcloud compute instances list --filter='tags.items:development'

documentation 声明:"..您还可以过滤嵌套字段。例如,您可以过滤已设置 schedule.automaticRestart 的实例field 为 true。对嵌套字段使用过滤以利用标签来组织和搜索基于标签值的结果。" 但是没有提供示例,因此不清楚具体是如何处理的。

我尝试过labels.development eq *.*labels eq *development*labels:development 等。我还尝试将命令行客户端的详细程度设置为info 并查看输出,以及监控从 Compute Engine web console 转到 API 的请求,但都没有让我到任何地方。

【问题讨论】:

  • 我发现gcloud compute instances list --filter='tags.items[0]:yourtagname' 有效,但前提是yourtagname 是列表中的第一个标签。

标签: google-compute-engine


【解决方案1】:

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

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

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

gcloud compute instances list --filter='tags.items~^production$'

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

这似乎有效,但我找不到任何明确说明它应该有效的文档。最接近的是topic filters 上提到这一点的部分

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


你也可以搜索多个标签

gcloud compute instances list --filter='tags.items~^production$ AND tags.items~^european$'

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


标签 v 自定义元数据

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

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

gcloud compute instances list --filter="metadata.items.key['brand']['value']='Coca-Cola'"

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

gcloud compute instances list --filter="metadata.items.key['brand']['value']='Pepsi Cola'"


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

您可能已经猜到了,但正则表达式运算符也适用于元数据过滤器,因此您可以这样做

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

【讨论】:

  • 如果你有一个aaaaaproductionbbbbb 标签,它也会匹配。解决方案是匹配^production$
  • @snetch - 谢谢,我已更新答案以反映您的建议。
  • 这些映射到 API 吗? API 过滤器表达式似乎不支持 eqneq 以外的任何内容
  • @neq 不能说我很害怕 - 我正在使用 Ansible 脚本中的这些。
【解决方案2】:

正如here 解释的那样,您可以使用 gcloud cli 使用以下语法:

gcloud compute instances list --filter labels.env=dev

我正在使用的多重过滤示例:

gcloud compute instances list  --filter="zone:( europe-west1-d )" --filter="name:( testvm )" --filter labels.group=devops --filter labels.environment_type=production

【讨论】:

    【解决方案3】:

    gke-cluster-asia-eas-default-pool-dc8f484c-knbs 添加实例元数据MyKey=MyValue

    gcloud compute instances add-metadata gke-cluster-asia-eas-default-pool-dc8f484c-knbs --metadata=MyKey=MyValue

    显示所有带有MyKey=MyValue的实例:

    gcloud compute instances list --filter="metadata.items.key['MyKey'][value]='MyValue'"

    显示属于集群cluster-asia-east1-a的所有实例:

    gcloud compute instances list --filter="metadata.items.key['cluster-name'][value]='cluster-asia-east1-a'"

    NAME                                             ZONE          MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP     STATUS
    gke-cluster-asia-eas-default-pool-dc8f484c-knbs  asia-east1-a  n1-standard-1               10.140.0.2   104.155.227.25  RUNNING
    gke-cluster-asia-eas-default-pool-dc8f484c-x8cv  asia-east1-a  n1-standard-1               10.140.0.3   104.199.226.16  RUNNING
    gke-cluster-asia-eas-default-pool-dc8f484c-z5wv  asia-east1-a  n1-standard-1               10.140.0.4   104.199.134.9   RUNNING
    

    【讨论】:

      猜你喜欢
      • 2020-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 2017-11-06
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      相关资源
      最近更新 更多