Openstack使用python SDK v2进行身份验证

时间:2018-09-11 07:12:27

标签: python rest openstack devstack

我是这里的OpenStack新手。

我尝试使用REST API来自动化我的openstack工作。我可以通过以下命令成功对我的帐户进行身份验证并从curl获取令牌:

export AUTH_URL="https://my_url:5000/v2.0/tokens"
curl -v -X POST $AUTH_URL -d '{"auth":{"passwordCredentials":{"username": "myusername", "password":"myuser_password"}, "tenantId":"my_tenant_id"}}' -H 'Content-type: application/json' | python -m json.tool

但是,当我尝试使用Pyton时,通过此代码,它给了我这个错误

Traceback (most recent call last):
  File "./test.py", line 10, in <module>
    keystone = ksclient.Client(auth_url=auth_url, username=user_name, password=user_pwd, tenant_name=tenant_name)
  File "/usr/lib/python2.7/site-packages/keystoneclient/v2_0/client.py", line 176, in __init__
    self.authenticate()
  File "/usr/lib/python2.7/site-packages/positional/__init__.py", line 101, in inner
    return wrapped(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/keystoneclient/httpclient.py", line 581, in authenticate
    resp = self.get_raw_token_from_identity_service(**kwargs)
  File "/usr/lib/python2.7/site-packages/keystoneclient/v2_0/client.py", line 220, in get_raw_token_from_identity_service
    _("Authorization Failed: %s") % e)
keystoneauth1.exceptions.auth.AuthorizationFailure: Authorization Failed: The resource could not be found. (HTTP 404) (Request-ID: 

我的python代码如下:

#!/usr/bin/env python

import keystoneclient.v2_0.client as ksclient

auth_url  = "https://my_url:5000/v2.0/tokens"
user_name = "myusername"
user_pwd  = "myuser_password"
tenant_name = "my_tenant_id"

keystone = ksclient.Client(auth_url=auth_url, username=user_name, password=user_pwd, tenant_name=tenant_name)

print keystone.auth_token

能否请您看看我的代码,看看为什么python代码不起作用?

谢谢!

1 个答案:

答案 0 :(得分:0)

使用客户端进行身份验证时,您仅应提供https://my_url:5000/v2.0作为路径。

有关更多信息,请参见this文档。

您也可以尝试这样的事情。

from keystoneauth1 import loading
from keystoneauth1 import session
from keystoneclient import client as keystoneclient

auth_url = 'https://my_url:5000'
user = '<user>'
password = '<password>'
tenant = '<tenant>'

loader = loading.get_plugin_loader('password')

keystone_auth = \
    loader.load_from_options(
        auth_url=auth_url,
        username=user,
        password=password,
        user_domain_name=tenant
    )

keystone_session = session.Session(
    auth=keystone_auth,
    verify=False
)

print(keystone_session.get_token())

请记住,Keystone V2 API已被弃用,并已在最新版本的Openstack中删除。如果可能的话,我建议您尽快移至V3 API。