2016-04-18 2 views
-2

Ich versuche, einige Tests mit Libcloud für OpenStack auszuführen, aber stecken auf Konnte den angegebenen Endpunkt Problem nicht finden. Wenn ich diesen Code ausführen:Libcloud - ServiceCatalog leer, aber OpenStack listet die Dienste auf

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() 

ich diesen Fehler:

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'> 

Nach der docs https://libcloud.readthedocs.org/en/latest/compute/drivers/openstack.html#i-get-could-not-find-specified-endpoint-error es der Service-Katalog von Openstack scheint nicht gefüllt ist. Und das scheint zu stimmen, denn das ist die Antwort, die ich vom Server bekomme. Sie können sehen, dass der ServiceCatalog leer ist.

{ 
    "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" 
     } 
    } 
} 

aber wenn ich openstack catalog list Befehl ausführen, bekomme ich dieses Ergebnis:

+------------+----------+------------------------------------------------------------------------+ 
| 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          | 
... 

Wie kann ich machen libcloud meinen Service-Katalog von Openstack identifizieren, wie es tut scheint in Ordnung zu sein, aber nicht abgerufen wird ? Bereits versucht, ex_force_service_type, ex_force_service_name, ex_force_service_region mit demselben Ergebnis zu verwenden. Die Verwendung von ex_force_auth_token und ex_force_base_url führt zu einem 404-Fehler.

Danke!

+0

Einfach zu verwerfen ohne eine Erklärung –

Antwort

1

Es stellte sich heraus, dass es ein Problem mit Keystone (Authentifizierung) Version war. Es ist notwendig,

ex_force_auth_version='3.x_password' 

statt

ex_force_auth_version='2.0_password' 

zu verwenden, die nicht in den libcloud docs für Openstack dokumentiert ist: https://libcloud.readthedocs.org/en/latest/compute/drivers/openstack.html#connecting-to-the-openstack-installation

Auch enthalten hatte

ex_tenant_name='admin' 

in mein Fall, damit es funktioniert. Der seltsame Teil ist, dass auth mit v2 tatsächlich auth fein ausgeführt wird (ich konnte eine falsche Anmeldungsnachricht erhalten), aber gebe die Katalogliste nicht zurück. Nur v3 macht das. Jeder kann erklären, warum das passiert?

+0

Sie können Shade statt libcloud betrachten, wenn Sie eine OpenStack-Cloud verwenden. http://docs.openstack.org/infra/shade/index.html –

Verwandte Themen