如何使用python-openstack客户端API v3与keystone建立授权请求

时间:2015-10-16 13:02:43

标签: python-2.7 openstack keystone

我遇到python-openstackclient库的问题。当我运行此代码以使用keystone进行授权时:

from keystoneclient import session
from keystoneclient.v3 import client
from keystoneclient.auth.identity import v3
password = v3.PasswordMethod(username='idm',password='idm',user_domain_name='idm')
auth = v3.Auth(auth_url='http://127.0.0.1:5000/v3',auth_methods=[password],project_id='idm')
sess = session.Session(auth=auth)
keystone = client.Client(session=sess)
keystone.users.list()

我收到此错误: keystoneclient.openstack.common.apiclient.exceptions.Unauthorized:您提出的请求需要身份验证。 (HTTP 401)

但是当我尝试openstack客户端程序时:

openstack user list

它给了我很好的输出。 我的.bashrc中有下一个全局变量:

export OS_SERVICE_ENDPOINT=http://127.0.0.1:35357/v3
export OS_AUTH_URL=http://127.0.0.1:5000/v3
export OS_TENANT_NAME=idm
export OS_USERNAME=idm
export OS_PASSWORD=idm
export OS_IDENTITY_API_VERSION=3
export OS_URL=http://127.0.0.1:35357/v3

这个python代码有什么问题? 谢谢!

2 个答案:

答案 0 :(得分:0)

我设法做到了这样:

from keystoneclient import session
from keystoneclient.v3 import client
from keystoneclient.auth.identity import v3
auth = v3.Password(auth_url='http://127.0.0.1:5000/v3',user_id='idm',password='idm',project_id='2545070293684905b9623095768b019d')
sess = session.Session(auth=auth)
keystone = client.Client(session=sess)
keystone.users.list()

答案 1 :(得分:0)

我遇到了同样的问题,但在应用了提议的解决方案后,我得到了:

  

keystoneauth1.exceptions.connection.ConnectFailure:无法使用   建立与http://192.0.2.12:35357/v2.0/users的连接:   HTTPConnectionPool(host =' 192.0.2.12',port = 35357):最大重试次数   超过url:/v2.0/users(由...引起)   NewConnectionError(':无法建立新连接:   [Errno 110]连接超时',))

请注意,我的auth_url =' https://myopenstack.somewhere.org:13000/v3',

事实证明,客户端在界面上发现和使用服务,默认情况下是“管理员”,并且我无法访问。当强制界面公开时,它可以工作:

keystone = client.Client(session=sess, interface='Public')