如何使用 python-openstack 客户端 API v3 通过 keystone 建立授权请求
How to establish authorized request with keystone using python-openstack client API v3
我在使用 python-openstackclient library.When 时遇到问题 运行 此代码使用 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 代码可能有什么问题?
谢谢!
我是这样做的:
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()
我遇到了同样的问题,但在应用建议的解决方案后,我得到了:
keystoneauth1.exceptions.connection.ConnectFailure: Unable to
establish connection to http://192.0.2.12:35357/v2.0/users:
HTTPConnectionPool(host='192.0.2.12', port=35357): Max retries
exceeded with url: /v2.0/users (Caused by
NewConnectionError(': Failed to establish a new connection:
[Errno 110] Connection timed out',))
注意我的 auth_url='https://myopenstack.somewhere.org:13000/v3',
事实证明,客户端正在默认为 'Admin' 的接口上发现和使用服务,而我无法访问该接口。将接口强制设置为 Public 时有效:
keystone = client.Client(session=sess, interface='Public')
我在使用 python-openstackclient library.When 时遇到问题 运行 此代码使用 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 代码可能有什么问题? 谢谢!
我是这样做的:
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()
我遇到了同样的问题,但在应用建议的解决方案后,我得到了:
keystoneauth1.exceptions.connection.ConnectFailure: Unable to establish connection to http://192.0.2.12:35357/v2.0/users: HTTPConnectionPool(host='192.0.2.12', port=35357): Max retries exceeded with url: /v2.0/users (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 110] Connection timed out',))
注意我的 auth_url='https://myopenstack.somewhere.org:13000/v3',
事实证明,客户端正在默认为 'Admin' 的接口上发现和使用服务,而我无法访问该接口。将接口强制设置为 Public 时有效:
keystone = client.Client(session=sess, interface='Public')