方法项目。清单提供有关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))