2016-11-17 5 views
0

Я пытаюсь использовать libcloud (1.3.0) для подключения к GCE проекта, используя следующий код:Не удается проверить подлинность с помощью libcloud GCE Driver

from libcloud.compute.types import Provider 
from libcloud.compute.providers import get_driver 

USER_ID = "[email protected]" 
KEYFILE = "./xxxxxxx.json" 
PROJECT = "project1" 

cls = get_driver(Provider.GCE) 
driver = cls(USER_ID, KEYFILE, project = PROJECT) 

Это просто терпит неудачу с AttributeError внутри PyCrypto (I» м работает v2.6.1):

Traceback (most recent call last): 
    File "g.py", line 9, in <module> 
    driver = cls(USER_ID, KEYFILE, project = PROJECT) 
    File "/usr/lib/python2.7/site-packages/libcloud/compute/drivers/gce.py", line 1348, in __init__ 
    super(GCENodeDriver, self).__init__(user_id, key, **kwargs) 
    File "/usr/lib/python2.7/site-packages/libcloud/common/base.py", line 1179, in __init__ 
    self.connection = self.connectionCls(*args, **conn_kwargs) 
    File "/usr/lib/python2.7/site-packages/libcloud/compute/drivers/gce.py", line 98, in __init__ 
    credential_file=credential_file, **kwargs) 
    File "/usr/lib/python2.7/site-packages/libcloud/common/google.py", line 765, in __init__ 
    user_id, key, auth_type, credential_file, scopes, **kwargs) 
    File "/usr/lib/python2.7/site-packages/libcloud/common/google.py", line 660, in __init__ 
    self.token = self.oauth2_conn.get_new_token() 
    File "/usr/lib/python2.7/site-packages/libcloud/common/google.py", line 530, in get_new_token 
    signature = base64.urlsafe_b64encode(signer.sign(hash_func)) 
    File "/usr/lib/python2.7/site-packages/Crypto/Signature/PKCS1_v1_5.py", line 110, in sign 
    em = EMSA_PKCS1_V1_5_ENCODE(mhash, k) 
    File "/usr/lib/python2.7/site-packages/Crypto/Signature/PKCS1_v1_5.py", line 211, in EMSA_PKCS1_V1_5_ENCODE 
    digestAlgo = DerSequence([hash.oid, DerNull().encode()]) 
AttributeError: oid 

Я следовал всем инструкциям на странице драйвера libcloud GCE о настройке учетной записи службы, загрузив файл в формате JSON и т.д., так что я думаю, что я делаю правильные шаги, но я не может пройти мимо этой проблемы.

ответ

0

Я только что протестировал это на Python 2.7.12 с PyCrypto 2.6.1 и не вижу никаких проблем с libcloud 1.3.0. Глядя на хешер, я подозреваю, что это проблема с настройкой вашей учетной записи службы.

from libcloud.compute.types import Provider 
from libcloud.compute.providers import get_driver 

USER_ID = "[email protected]" 
KEYFILE = "./libcloud-test-xxx.json" 
PROJECT = "libcloud-test" 

cls = get_driver(Provider.GCE) 
driver = cls(USER_ID, KEYFILE, project = PROJECT) 
print(driver.auth_type) # should be SA 
print(driver.list_nodes()) 

С API диспетчера, я пошел к проверке полномочий, затем выбирается "Создание учетных данных" -> "Service Key Account". Для учетной записи службы я выбрал «Учетная запись службы по умолчанию для Compute Engine» и формат JSON.

Compute учетная запись службы двигателя по умолчанию

enter image description here

В диспетчере учетных данных учетной записи службы выглядит как этот

enter image description here

Смежные вопросы