Libcloud-serviceCatalog为空,但OpenStack列出了服务

Libcloud-serviceCatalog为空,但OpenStack列出了服务,cloud,openstack,libcloud,Cloud,Openstack,Libcloud,我正在尝试使用libcloud for OpenStack运行一些测试,但是遇到了无法找到指定端点的问题。当我运行此代码时: from libcloud.compute.types import Provider from libcloud.compute.providers import get_driver import libcloud.security libcloud.security.VERIFY_SSL_CERT = False OpenStack = get_driver(

我正在尝试使用libcloud for OpenStack运行一些测试,但是遇到了无法找到指定端点的问题。当我运行此代码时:

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

import libcloud.security

libcloud.security.VERIFY_SSL_CERT = False

OpenStack = get_driver(Provider.OPENSTACK)

driver = OpenStack(
'admin', 'password',
ex_force_auth_url='http://controller:5000',
ex_force_auth_version='2.0_password'
)

driver.list_images()
我得到这个错误:

Traceback (most recent call last):
  File "my_script.py", line 25, in <module>
    driver.list_images()
  File "/usr/local/lib/python2.7/dist-packages/libcloud/compute/drivers/openstack.py", line 279, in list_images
    self.connection.request('/images/detail').object, ex_only_active)
  File "/usr/local/lib/python2.7/dist-packages/libcloud/common/openstack.py", line 202, in request
    raw=raw)
  File "/usr/local/lib/python2.7/dist-packages/libcloud/common/base.py", line 709, in request
    action = self.morph_action_hook(action)
  File "/usr/local/lib/python2.7/dist-packages/libcloud/common/openstack.py", line 269, in morph_action_hook
    self._populate_hosts_and_request_paths()
  File "/usr/local/lib/python2.7/dist-packages/libcloud/common/openstack.py", line 313, in _populate_hosts_and_request_paths
    url = self._ex_force_base_url or self.get_endpoint()
  File "/usr/local/lib/python2.7/dist-packages/libcloud/common/openstack.py", line 254, in get_endpoint
    region=service_region)
  File "/usr/local/lib/python2.7/dist-packages/libcloud/common/openstack_identity.py", line 278, in get_endpoint
    raise LibcloudError('Could not find specified endpoint')
libcloud.common.types.LibcloudError: <LibcloudError in None 'Could not find specified endpoint'>
但当我运行
openstack catalog list
命令时,我得到以下结果:

+------------+----------+------------------------------------------------------------------------+
| Name       | Type     | Endpoints                                                              |
+------------+----------+------------------------------------------------------------------------+
| keystone   | identity | RegionOne                                                              |
|            |          |   public: http://controller:5000/v2.0                                  |
|            |          | RegionOne                                                              |
|            |          |   admin: http://controller:35357/v2.0                                  |
|            |          | RegionOne                                                              |
|            |          |   internal: http://controller:5000/v2.0                                |
|            |          |                                                                        |
| glance     | image    | RegionOne                                                              |
|            |          |   public: http://controller:9292                                       |
|            |          | RegionOne                                                              |
|            |          |   internal: http://controller:9292                                     |
|            |          | RegionOne                                                              |
|            |          |   admin: http://controller:9292                                        |
...
我如何让libcloud从openstack中识别我的服务目录,因为它看起来还可以,但没有被提取?已尝试使用ex_force_service_类型、ex_force_service_名称、ex_force_service_区域,但结果相同。使用ex_force_auth_令牌和ex_force_base_url会导致404错误


谢谢

原来这是keystone(身份验证)版本的问题。有必要使用

ex_force_auth_version='3.x_password'
而不是

ex_force_auth_version='2.0_password'
OpenStack的libcloud文档中没有记录:

还必须包括

ex_tenant_name='admin'

在我的情况下,让它工作。奇怪的是,使用v2进行auth实际上运行auth fine(我得到了一条错误的凭据消息),但不返回目录列表。只有v3能做到这一点。任何人都可以解释为什么会发生这种情况?

如果您使用的是OpenStack云,您可能希望查看Shade而不是libcloud。很容易在没有解释的情况下否决
ex_tenant_name='admin'