如何在apache libcloud中测试提供程序凭据是否有效?

时间:2015-01-29 06:53:35

标签: apache openstack libcloud

我正在尝试使用apache libcloud为openstack创建一个驱动程序。即使用户凭据错误,它也不会引发任何错误。所以,当我检查常见问题时,我找到了链接中给出的答案 Apache libcloud FAQ

但它似乎没有效果,因为每次查询用户是否经过身份验证都会降低性能,如果查询返回大量数据。

当我检查我从api获得的响应时,有一个名为driver.connection.auth_user_info的字段,如果用户未经过身份验证,我发现该字段为空。那么我可以使用这种方法作为标准吗?任何帮助表示赞赏

1 个答案:

答案 0 :(得分: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)

但是libcloud不会通过创建driver对象来检查凭据。相反,只有在发送请求时才会验证信用。如果抛出内部异常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,因为它可能会随着时间而改变。