1

Apache libcloud を使用して、openstack 用のドライバーを作成しようとしていました。ユーザー資格情報が間違っていても、エラーは発生しません。そのため、よくある質問を確認したところ、リンク Apache libcloud FAQに示されている回答が見つかりました

ただし、クエリが大量のデータを返す場合、ユーザーが認証されているかどうかを確認するために毎回クエリを実行すると、パフォーマンスが低下するため、効果的ではないようです。

APIから取得した応答を確認すると、というdriver.connection.auth_user_infoフィールドがあり、ユーザーが認証されていない場合、フィールドが空であることがわかりました。この方法を標準として使用できますか?どんな助けでも大歓迎です

4

1 に答える 1

1

libcloud 用の openstack ドライバーは既に利用可能です。

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

os = get_driver(Provider.OPENSTACK)
params = {'key': 'username', 'ex_force_service_region':'regionOne', 
   'ex_force_service_name':'nova', 'ex_force_auth_version':'2.0_password',
   'ex_force_auth_url':'http://127.0.0.1:5000',
   'ex_force_service_type':'compute', 'secret':'password',
   'ex_tenant_name':'tenant'}
driver = os(**params)

driverしかし、libcloud はオブジェクトを作成するだけでは資格情報をチェックしません。代わりに、リクエストが送信されたときにのみ、クレデンシャルが検証されます。内部例外InvalidCredsErrorがスローされた場合、資格情報は無効であり、独自の変数が設定される可能性があります。

from libcloud.common.types import InvalidCredsError

validcreds = False

try:
    nodes = driver.list_nodes()
    if nodes.count >= 0:
        validcreds = True
except InvalidCredsError:
    print "Invalid credentials"
except Exception as e:
    print str(e)

時間の経過とともに変化する可能性があるため、内部変数には依存しませんauth_user_info

于 2015-01-29T11:01:57.933 に答える