如何使用Resource Manager API在“无组织”下列出我的GCP项目?

时间:2019-10-24 14:31:42

标签: google-cloud-platform google-api google-cloud-iam

我似乎找不到Project List API方法的适当过滤器,仅列出我有权访问但在“无组织”下的项目。

是否有过滤器? 实现该目标的方法是什么?

3 个答案:

答案 0 :(得分:2)

根据documentation,您应该能够使用过滤器来检查项目是否属于父级(组织)。通过cli可以起作用:

gcloud projects list --filter="parent.id.yesno(yes='Yes', no='No')=No"

这也可以:

gcloud projects list --filter="parent.id:None"

则python等效为:

from googleapiclient import discovery
from oauth2client.client import GoogleCredentials

credentials = GoogleCredentials.get_application_default()

service = discovery.build('cloudresourcemanager', 'v1beta1', credentials=credentials)

filter = "parent.id:None"
projects = service.projects().list(filter=filter).execute()

答案 1 :(得分:1)

恐怕没有直接的方法可以实现这一目标。过滤器必须匹配“ parent.id”或“ parent.type”属性,在没有组织的项目中,该属性不存在(它们没有“ parent”属性)。

这必须分两个步骤完成:

1.-使用提及的Project List method列出所有项目。

2.-使用Project Get method浏览每个项目,并检查属性“ parent”是否存在,如果该属性存在,则表示它属于组织(或文件夹),否则,它不属于组织(或文件夹)没错

项目示例获得组织的回复:

{
  "projectNumber": "4444444444",
  "projectId": "my-project-id",
  "lifecycleState": "ACTIVE",
  "name": "my-project-name",
  "createTime": "2019-04-05T06:57:37.142Z"
  "parent": {
    "type": "organization",
    "id": "5555555555”
  }

}

项目示例在没有组织的情况下获得答复:

{
  "projectNumber": "4444444444",
  "projectId": "my-project-id",
  "lifecycleState": "ACTIVE",
  "name": "my-project-name",
  "createTime": "2019-04-05T06:57:37.142Z"
}

答案 2 :(得分:0)

使用过滤器“ -parent.type:folder”(以破折号开头且没有parent.id参数)应该可以解决该问题。

我使用此过滤器尝试了API [1],但没有组织项目。

[1] https://cloud.google.com/resource-manager/reference/rest/v1/projects/list