获取使用Apache LibCloud的GCE项目列表



方法项目。清单提供有关API调用的详细信息,以请求Google Computer Engine" Projects"。是否可以使用libcloud进行此操作?我在文档中没有找到任何参考,也没有找到源代码,所以我认为这是不可能的。

如果是这样,谁能就如何实现这一目标提供一些帮助?初始化GCENodeDriver不是一个选项,因为它需要提供一个项目。但是,当使用适当的项目初始化它时,我可以使用其中包含的connection参考。但是到目前为止,我试图发行

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

没有任何有用的东西

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

我想知道我是否可以为此调用使用相同的身份验证(使用服务帐户和身份验证JSON文件(。任何帮助都将受到赞赏。

查看 projects.list 的文档仅谈论成功的响应案例。

方法:projects.list

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

http请求

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

URL使用Google API http注释语法。

请求body

请求主体必须为空。

响应主体

如果成功,响应主体包含以下数据 结构:

从项目中收到的响应的页面。清单方法。

一个分页的响应,有更多页面有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

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

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))

最新更新