2016-04-18 31 views
-2

我试图运行libcloud for OpenStack进行一些测试,但卡住了找不到指定的端点问题。当我运行这段代码:Libcloud - serviceCatalog为空,但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的服务目录没有被填满的文档https://libcloud.readthedocs.org/en/latest/compute/drivers/openstack.html#i-get-could-not-find-specified-endpoint-error。这似乎是真的,因为这是我从服务器得到的答案。你可以看到serviceCatalog是空的。

{ 
    "access": { 
     "metadata": { 
      "is_admin": 0, 
      "roles": [] 
     }, 
     "serviceCatalog": [], 
     "token": { 
      "audit_ids": [ 
       "bH-SKGBdRCWlZTtB8LcDIg" 
      ], 
      "expires": "2016-04-18T20:41:38Z", 
      "id": "3298b08a96284dfd9473881afce659c9", 
      "issued_at": "2016-04-18T19:41:38.277756" 
     }, 
     "user": { 
      "id": "74767f37d3ee4e3d92a1d0fe6d7da82f", 
      "name": "admin", 
      "roles": [], 
      "roles_links": [], 
      "username": "admin" 
     } 
    } 
} 

但是当我运行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_type,ex_force_service_name,ex_force_service_region以及相同的结果。使用ex_force_auth_token和ex_force_base_url会导致404错误。

谢谢!

+0

易于downvote而无需解释 –

回答

1

原来这是keystone(认证)版本的问题。这是需要使用

ex_force_auth_version='3.x_password' 

,而不是

ex_force_auth_version='2.0_password' 

未在libcloud文档记录了OpenStack的: https://libcloud.readthedocs.org/en/latest/compute/drivers/openstack.html#connecting-to-the-openstack-installation

还必须包括

ex_tenant_name='admin' 

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

+0

如果您使用的是OpenStack云,您可能希望查看Shade而不是libcloud。 http://docs.openstack.org/infra/shade/index.html –