【发布时间】:2019-10-24 14:31:42
【问题描述】:
我似乎无法为Project List API 方法找到合适的过滤器,以仅列出我有权访问但在“无组织”下的项目。
有过滤器吗? 实现这一目标的方法是什么?
【问题讨论】:
标签: google-cloud-platform google-api google-cloud-iam
我似乎无法为Project List API 方法找到合适的过滤器,以仅列出我有权访问但在“无组织”下的项目。
有过滤器吗? 实现这一目标的方法是什么?
【问题讨论】:
标签: google-cloud-platform google-api google-cloud-iam
根据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()
【讨论】:
恐怕没有直接的方法可以实现这一目标。过滤器必须匹配“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"
}
【讨论】:
使用过滤器“-parent.type:folder”(以破折号开头且没有 parent.id 参数)应该可以解决问题。
我已经使用这个过滤器尝试了 API [1] 并且得到了无组织的项目。
[1]https://cloud.google.com/resource-manager/reference/rest/v1/projects/list
【讨论】: