在GCP中按机器类型过滤

时间:2018-07-01 23:35:37

标签: java google-cloud-platform

我正在尝试根据机器类型过滤实例列表。但是,这似乎不起作用。

Compute.Instances.List request = computeService.instances().list("project-name","us-central1-a" );
request.setFilter("(machinetype = zones/us-central1-a/machineTypes/n1-standard-1)");

InstanceList instanceList = request.execute();
List<Instance> instances = instanceList.getItems();

即使我有一个与过滤器匹配的实例,响应也为空! (当我删除过滤器时,它将获得实例。)

[chaker@cbenhamed:~]$ gcloud compute instances list                                                                                                                                                                                      
NAME                                          ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS                                                                                                                   
foo-bar-worker-n1-standard-1-65304152130-zfq  us-central1-a  n1-standard-1  true         10.240.0.2   00.000.00.255  RUNNING

根据documentation,在这种情况下, filter 参数应该可以使用。因为,首先,machineType在Instance对象的根目录中。其次,这是machineType参数的正确形式

  

用于此实例的计算机类型资源的完整或部分URL,格式为:zones / zone / machineTypes / machine-type。创建实例时由客户端提供。

我尝试检查 gcloud

发出的HTTP请求
gcloud compute instances list --filter="machineType:n1-standard-1" --log-http

但是事实证明,它可以获取整个列表(跨越所有区域!)并在本地对其进行过滤!

1 个答案:

答案 0 :(得分:0)

这似乎是一种误解,文档将 machineType 描述为 Response body 的自变量,而不是过滤器。因此,在这种情况下,您不能使用部分URL,也只能使用以下比较运算符=,!=,>或<,它们都不像。

我认为使用此过滤器的唯一方法是使用完整的网址,就像Oleksandr Bushkovskyi评论过一样:

machineType =“ https://www.googleapis.com/compute/v1/projects/[PROJECT]/zones/[ZONE]/machineTypes/[MACHINE_TYPE]”