Получить список проектов 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
Другие вопросы по тегам