Google Cloud Platform:使用 api 列出可用项目
Google Cloud Platform: List available projects using api
我想通过 api 调用 (python
) 实现与 gcloud projects list
相同的效果。
但是,我浏览文档时唯一能遇到的就是这个。
此操作是否专门绑定到资源管理器 API?
其他项目的可见性会怎样?如果 RM 绑定到一个项目,它如何查看(并因此列出)其他项目?
您只能列出您有权访问的项目。这意味着您无法查看所有项目,除非您有权访问它们。在下面的示例中,我展示了需要哪些范围。这也意味着您可以跨帐户列出项目。这使您可以使用示例中指定的凭据查看您有权访问哪些项目。我展示了如何使用应用程序默认凭据 (ADC) 和服务帐户凭据(Json 文件格式)。
有关更多信息,您可以阅读我关于项目的文章here。
这些示例已经在 Windows 10 Professional 上使用 Python 3.6 进行了测试。这些示例将完全按照 CLI 显示项目列表。
示例 1 使用 Python 客户端库(服务发现方法):
from googleapiclient import discovery
from oauth2client.client import GoogleCredentials
from google.oauth2 import service_account
# Example using the Python Client Library
# Documentation
# https://github.com/googleapis/google-api-python-client
# https://developers.google.com/resources/api-libraries/documentation/cloudresourcemanager/v2/python/latest/
# Library Installation
# pip install -U google-api-python-client
# pip install -U oauth2client
# Requires one of the following scopes
# https://www.googleapis.com/auth/cloud-platform
# https://www.googleapis.com/auth/cloud-platform.read-only
# https://www.googleapis.com/auth/cloudplatformprojects
# https://www.googleapis.com/auth/cloudplatformprojects.readonly
print('{:<20} {:<22} {:<21}'.format('PROJECT_ID', 'NAME', 'PROJECT_NUMBER'))
# Uncomment to use Application Default Credentials (ADC)
credentials = GoogleCredentials.get_application_default()
# Uncomment to use Service Account Credentials in Json format
# credentials = service_account.Credentials.from_service_account_file('service-account.json')
service = discovery.build('cloudresourcemanager', 'v1', credentials=credentials)
request = service.projects().list()
while request is not None:
response = request.execute()
for project in response.get('projects', []):
print('{:<20} {:<22} {:<21}'.format(project['projectId'], project['name'], project['projectNumber']))
request = service.projects().list_next(previous_request=request, previous_response=response)
示例 2 使用 Python Google 云资源管理器 API 客户端库:
from google.cloud import resource_manager
# Example using the Python Google Cloud Resource Manager API Client Library
# Documentation
# https://pypi.org/project/google-cloud-resource-manager/
# https://github.com/googleapis/google-cloud-python
# https://googleapis.github.io/google-cloud-python/latest/resource-manager/index.html
# https://googleapis.github.io/google-cloud-python/latest/resource-manager/client.html
# https://googleapis.github.io/google-cloud-python/latest/resource-manager/project.html
# Library Installation
# pip install -U google-cloud-resource-manager
# Requires one of the following scopes
# https://www.googleapis.com/auth/cloud-platform
# https://www.googleapis.com/auth/cloud-platform.read-only
# https://www.googleapis.com/auth/cloudplatformprojects
# https://www.googleapis.com/auth/cloudplatformprojects.readonly
print('{:<20} {:<22} {:<21}'.format('PROJECT_ID', 'NAME', 'PROJECT_NUMBER'))
# Uncomment to use Application Default Credentials (ADC)
client = resource_manager.Client()
# Uncomment to use Service Account Credentials in Json format
# client = resource_manager.Client.from_service_account_json('service-account.json')
for project in client.list_projects():
print('{:<20} {:<22} {:<21}'.format(project.project_id, project.name, project.number))
自@john-hanley 彻底回答以来,客户端库发生了变化。这是使用 v3 的 API 和客户端的 v1.3.3 的版本:
from google.cloud.resourcemanager import ProjectsClient
ORGANIZATION_ID = 'your-org's-numeric-id'
client = ProjectsClient()
project_pager = client.list_projects(parent=f'organizations/{ORGANIZATION_ID}')
pjs = []
for page in project_pager:
pjs.append(page)
pjs
是 google.cloud.resourcemanager_v3.types.projects.Project
个对象的列表。
请注意,这假定您使用的是应用程序默认凭据 (ADC),并且相关用户帐户具有 resourcemanager.projects.list
权限。
要使用 ADC,运行 gcloud auth application-default login
或 gcloud auth login --update-adc
更改用户帐户后。
如果您可以成功 运行 gcloud projects list
,那么您就具有使用上述代码所需的访问权限级别。
我想通过 api 调用 (python
) 实现与 gcloud projects list
相同的效果。
但是,我浏览文档时唯一能遇到的就是这个。
此操作是否专门绑定到资源管理器 API?
其他项目的可见性会怎样?如果 RM 绑定到一个项目,它如何查看(并因此列出)其他项目?
您只能列出您有权访问的项目。这意味着您无法查看所有项目,除非您有权访问它们。在下面的示例中,我展示了需要哪些范围。这也意味着您可以跨帐户列出项目。这使您可以使用示例中指定的凭据查看您有权访问哪些项目。我展示了如何使用应用程序默认凭据 (ADC) 和服务帐户凭据(Json 文件格式)。
有关更多信息,您可以阅读我关于项目的文章here。
这些示例已经在 Windows 10 Professional 上使用 Python 3.6 进行了测试。这些示例将完全按照 CLI 显示项目列表。
示例 1 使用 Python 客户端库(服务发现方法):
from googleapiclient import discovery
from oauth2client.client import GoogleCredentials
from google.oauth2 import service_account
# Example using the Python Client Library
# Documentation
# https://github.com/googleapis/google-api-python-client
# https://developers.google.com/resources/api-libraries/documentation/cloudresourcemanager/v2/python/latest/
# Library Installation
# pip install -U google-api-python-client
# pip install -U oauth2client
# Requires one of the following scopes
# https://www.googleapis.com/auth/cloud-platform
# https://www.googleapis.com/auth/cloud-platform.read-only
# https://www.googleapis.com/auth/cloudplatformprojects
# https://www.googleapis.com/auth/cloudplatformprojects.readonly
print('{:<20} {:<22} {:<21}'.format('PROJECT_ID', 'NAME', 'PROJECT_NUMBER'))
# Uncomment to use Application Default Credentials (ADC)
credentials = GoogleCredentials.get_application_default()
# Uncomment to use Service Account Credentials in Json format
# credentials = service_account.Credentials.from_service_account_file('service-account.json')
service = discovery.build('cloudresourcemanager', 'v1', credentials=credentials)
request = service.projects().list()
while request is not None:
response = request.execute()
for project in response.get('projects', []):
print('{:<20} {:<22} {:<21}'.format(project['projectId'], project['name'], project['projectNumber']))
request = service.projects().list_next(previous_request=request, previous_response=response)
示例 2 使用 Python Google 云资源管理器 API 客户端库:
from google.cloud import resource_manager
# Example using the Python Google Cloud Resource Manager API Client Library
# Documentation
# https://pypi.org/project/google-cloud-resource-manager/
# https://github.com/googleapis/google-cloud-python
# https://googleapis.github.io/google-cloud-python/latest/resource-manager/index.html
# https://googleapis.github.io/google-cloud-python/latest/resource-manager/client.html
# https://googleapis.github.io/google-cloud-python/latest/resource-manager/project.html
# Library Installation
# pip install -U google-cloud-resource-manager
# Requires one of the following scopes
# https://www.googleapis.com/auth/cloud-platform
# https://www.googleapis.com/auth/cloud-platform.read-only
# https://www.googleapis.com/auth/cloudplatformprojects
# https://www.googleapis.com/auth/cloudplatformprojects.readonly
print('{:<20} {:<22} {:<21}'.format('PROJECT_ID', 'NAME', 'PROJECT_NUMBER'))
# Uncomment to use Application Default Credentials (ADC)
client = resource_manager.Client()
# Uncomment to use Service Account Credentials in Json format
# client = resource_manager.Client.from_service_account_json('service-account.json')
for project in client.list_projects():
print('{:<20} {:<22} {:<21}'.format(project.project_id, project.name, project.number))
自@john-hanley 彻底回答以来,客户端库发生了变化。这是使用 v3 的 API 和客户端的 v1.3.3 的版本:
from google.cloud.resourcemanager import ProjectsClient
ORGANIZATION_ID = 'your-org's-numeric-id'
client = ProjectsClient()
project_pager = client.list_projects(parent=f'organizations/{ORGANIZATION_ID}')
pjs = []
for page in project_pager:
pjs.append(page)
pjs
是 google.cloud.resourcemanager_v3.types.projects.Project
个对象的列表。
请注意,这假定您使用的是应用程序默认凭据 (ADC),并且相关用户帐户具有 resourcemanager.projects.list
权限。
要使用 ADC,运行 gcloud auth application-default login
或 gcloud auth login --update-adc
更改用户帐户后。
如果您可以成功 运行 gcloud projects list
,那么您就具有使用上述代码所需的访问权限级别。