Получить список проектов GCE с Apache libcloud
Метод projects.list предоставляет подробную информацию о вызове API для запроса "проектов" Google Computer Engine. Можно ли сделать это также с libcloud? Я не нашел ни ссылки на документацию, ни исходный код, поэтому я думаю, что это невозможно сразу.
Если это так, может ли кто-нибудь оказать помощь в том, как это можно реализовать? Инициализация GCENodeDriver
это не вариант, потому что он требует предоставления проекта. Тем не менее, при инициализации его с надлежащим проектом, я мог бы использовать connection
ссылка, которую он содержит. Но пока что мои попытки выдать
response = conn.request('https://cloudresourcemanager.googleapis.com/v1/projects', method='GET')
не принесло ничего полезного
(
libcloud.common.google.ResourceNotFoundError: u'Not Found'
).
Интересно, могу ли я использовать такую же аутентификацию для этого вызова (используя учетную запись службы и файл аутентификации json). Любая помощь приветствуется.
1 ответ
Я столкнулся с той же проблемой. В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))
Глядя на документацию для projects.list, речь идет только об успешном случае ответа.
Метод: projects.list
Перечисляет проекты, которые видны пользователю и удовлетворяют указанному фильтру. Этот метод возвращает проекты в неуказанном порядке. Новые проекты не обязательно появляются в конце списка.
HTTP-запрос
GET https://cloudresourcemanager.googleapis.com/v1/projects
URL использует синтаксис аннотации HTTP API Google.
Тело запроса
Тело запроса должно быть пустым.
Тело ответа
В случае успеха тело ответа содержит данные со следующей структурой:
Страница ответа, полученного от метода 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