我试图使用apache libcloud为openstack创建一个驱动程序。即使用户凭据错误,它也不会引发任何错误。因此,当我检查常见问题解答时,我找到了链接中给出的答案Apache libcloud FAQ
但它似乎并不有效,因为如果查询返回大量数据,每次查询以检查用户是否经过身份验证都会降低性能。
当我检查从 api 收到的响应时,有一个名为 driver.connection.auth_user_info
的字段,我发现如果用户未经过身份验证,该字段为空。那么我可以用这种方法作为标准吗?任何帮助不胜感激
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
因为它会随着时间的推移而变化。