Google Compute Engine Python API и веб-API не возвращают изображения или ядра.

При запуске Google Compute Engine я получаю неожиданные результаты, отличные от gcutil, при запросе изображений и ядер. Примечательно, что я не получаю никаких результатов.

С gcutil я получаю ожидаемый результат:

$ gcutil --project MYPROJECT listimages

+----------------------------------------------------------------+----------------------------------------------------------------+----------------------------------------------+-------------+--------+
|                              name                              |                          description                           |                    kernel                    | deprecation | status |
+----------------------------------------------------------------+----------------------------------------------------------------+----------------------------------------------+-------------+--------+
| projects/centos-cloud/global/images/centos-6-v20130731         | SCSI-enabled CentOS 6; Created Wed, 31 Jul 2013 00:00:00 +0000 | projects/google/global/kernels/gce-v20130603 |             | READY  |
| projects/debian-cloud/global/images/debian-6-squeeze-v20130723 | Debian GNU/Linux 6.0.7 (squeeze) built on 2013-07-23           | projects/google/global/kernels/gce-v20130603 |             | READY  |
| projects/debian-cloud/global/images/debian-7-wheezy-v20130723  | Debian GNU/Linux 7.1 (wheezy) built on 2013-07-23              | projects/google/global/kernels/gce-v20130603 |             | READY  |
+----------------------------------------------------------------+----------------------------------------------------------------+----------------------------------------------+-------------+--------+

Но когда я использую веб-API или Python API с чем-то вроде этого (сокращенно, но в основном прямо из примеров ):

def _service():
    flow = flow_from_clientsecrets(CLIENT_SECRETS, scope=GCE_SCOPE)
    storage = Storage(OAUTH2_STORAGE)
    credentials = storage.get()
    if credentials is None or credentials.invalid:
        credentials = run(flow, storage)
    http = httplib2.Http()
    auth_http = credentials.authorize(http)
    gce_service = build('compute', API_VERSION)
    return gce_service, credentials, auth_http

if __name__ == "__main__":
    gce_service, credentials, auth_http = _service()
    request = gce_service.images().list(project="MYPROJECT", filter=None)
    response = request.execute(http=auth_http)
    pprint(response)

И Web, и Python API возвращают что-то вроде этого:

{
 "kind": "compute#imageList",
 "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/MYPROJECT/global/images",
 "id": "projects/MYPROJECt/global/images"
}

т.е. отсутствует items, который ожидается в ответе.

Что я здесь делаю не так?


person Brian M. Hunt    schedule 17.08.2013    source источник


Ответы (2)


Изображения и ядра, предоставленные Google (и общедоступными), хранятся в другом проекте. Идея в том, что они не ваши как таковые, а публикуются google (или debian, или centos).

Вы можете перечислить ядра с помощью gcutil listkernels --project=google. Эквивалент с кодом - заменить MYPROJECT на google.

Для образов вы можете использовать centos-cloud для образов CentOS и debian-cloud для образов debian.

gcutil автоматически интегрируется из общих проектов для простоты использования.

person Joe Beda    schedule 19.08.2013
comment
Очень разумно, большое спасибо. Хотел бы я отметить это в документах. Ты знаешь, где можно найти эту и подобную информацию, Джо? - person Brian M. Hunt; 20.08.2013

Пример приложения от Google https://developers.google.com/compute/docs/api/python_guide#listinginstances правильно отображает изображения. Не уверен, как работает код. Вы определяете функцию _service (opts) с одним аргументом, а затем в строке 13 вы вызываете ее без аргументов gce_service, credentials, auth_http = _service ()

Пожалуйста, предоставьте рабочий код.

person Yuri Ginsburg    schedule 18.08.2013
comment
Спасибо, Юрий. Я исправил код, удалив аргумент opts в _service. Вы можете отметить, что перечисление экземпляров здесь не является проблемой; изменение gce_service.images на gce_service.instances или gce_service.zones даст ожидаемые результаты - список экземпляров. Проблема в ядрах и образах. - person Brian M. Hunt; 19.08.2013
comment
Брайан, извини за это. Итак, я изменил 2 строчки в примере Google - person Yuri Ginsburg; 19.08.2013
comment
Я изменил 2 строки в примере Google и теперь получил список изображений. Я заменил выражение project = MYPROJECT в вашем коде на свой фактический идентификатор проекта. запустив его, я также получил список изображений. Похоже, проблема не в API или библиотеках Python. - person Yuri Ginsburg; 19.08.2013
comment
Спасибо, Юрий. Я рассмотрю проблемы с аутентификацией и т. Д. И опубликую здесь свои результаты. - person Brian M. Hunt; 19.08.2013