-2

OpenStack 用の libcloud でいくつかのテストを実行しようとしていますが、指定されたエンドポイントの問題が見つかりませんでした。このコードを実行すると:

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

ドキュメントhttps://libcloud.readthedocs.org/en/latest/compute/drivers/openstack.html#i-get-could-not-find-specified-endpoint-errorによると、OpenStack のサービス カタログはそうではないようです満たされています。これは私がサーバーから得た答えであるため、それは本当のようです。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 エラーが発生します。

ありがとう!

4

1 に答える 1

1

keystone (認証) のバージョンに問題があることがわかりました。使用する必要があります

ex_force_auth_version='3.x_password'

それ以外の

ex_force_auth_version='2.0_password'

OpenStack の libcloud ドキュメントには記載されていません: https://libcloud.readthedocs.org/en/latest/compute/drivers/openstack.html#connecting-to-the-openstack-installation

また、含める必要がありました

ex_tenant_name='admin'

私の場合、それを機能させるために。奇妙な部分は、v2 で認証を行うと、実際には認証が正常に実行されますが (間違った資格情報メッセージを取得できました)、カタログ リストが返されないことです。それを行うのは v3 だけです。なぜそれが起こるのか説明できる人はいますか?

于 2016-04-22T14:27:11.233 に答える