方法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文件)。任何帮助表示赞赏。
答案 0 :(得分:0)
查看projects.list的文档,它只讨论成功的响应案例。
方法:projects.list
列出用户可见并满足指定的项目 过滤。此方法以未指定的顺序返回Projects。新 项目不一定出现在列表的末尾。
HTTP请求
GET https://cloudresourcemanager.googleapis.com/v1/projects
网址使用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
答案 1 :(得分:0)
我遇到了同样的问题。 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))