1

方法projects.list提供有关请求 Google 计算机引擎“项目”的 API 调用的详细信息。是否也可以使用libcloud做到这一点?我在文档和源代码中都没有找到任何参考资料,所以我认为这不可能马上。

如果是这样的话,任何人都可以就如何实施提供一些帮助吗?初始化GCENodeDriver不是一个选项,因为它需要提供一个项目。但是,当使用适当的项目对其进行初始化时,我可以使用connection它包含的引用。但到目前为止,我尝试发布一个

response = conn.request('https://cloudresourcemanager.googleapis.com/v1/projects', method='GET')

没有产生任何有用的东西

( libcloud.common.google.ResourceNotFoundError: u'Not Found')。

我想知道我是否可以为此调用使用相同的身份验证(使用服务帐户和身份验证 json 文件)。任何帮助表示赞赏。

4

2 回答 2

0

查看projects.list的文档,它只讨论了成功的响应案例。

方法:projects.list

列出对用户可见并满足指定过滤器的项目。此方法以未指定的顺序返回项目。新项目不一定出现在列表的末尾。

HTTP 请求

GET https://cloudresourcemanager.googleapis.com/v1/projects

该 URL 使用 Google API HTTP 注释语法。

请求正文

请求正文必须为空。

响应正文

如果成功,则响应正文包含具有以下结构的数据:

从 projects.list 方法收到的响应页面。

有更多页面可用的分页响应设置了 nextPageToken。此令牌可用于后续请求以检索下一个请求页面。

我不是太熟悉libcloud,所以不知道是什么Not Found意思。在我看来,该请求似乎得到了 404 响应。

我可以提出以下建议,以确认您使用的服务帐户具有所需的权限和身份验证范围。

  • 我不确定服务帐户需要拥有哪些权限/角色,但我认为它应该具有组织级别的权限才能列出项目。我在文档中找不到有关此的任何信息。

  • 以下是调用此 API 所需的授权范围信息。

授权

需要以下 OAuth 范围之一:

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
于 2017-06-13T15:48:51.817 回答
0

我遇到了同样的问题。端点使用不同的projects.list主机名和不同的 OAUTH 范围来获取权限,并且不适合 apache libcloud 的流程。我最终googleapiclient在我的 libcloud 脚本中添加了一些额外的代码来获取项目列表:

from googleapiclient import discovery
from google.oauth2 import service_account

projects = {}
kf = 'projectname-12345.json'
creds = service_account.Credentials.from_service_account_file(kf)
projapi = discovery.build('cloudresourcemanager', 'v1',
                          credentials=creds).projects()
req = projapi.list()
while req:
    resp = req.execute()
    for project in resp.get('projects',[]):
        projects[project['projectId']] = project
    req = projapi.list_next(previous_request=req,
                            previous_response=resp)

print(sorted(projects))
于 2019-10-02T13:16:54.400 回答