gpt4 book ai didi

python - 从 openstack keystone api 获取用户列表

转载 作者:行者123 更新时间:2023-11-28 22:01:20 25 4
gpt4 key购买 nike

我想对 openstack keystone 用户执行 CRUD 操作。根据 keystone api 文档,我们必须使用 GET 请求以及 x-auth-token 信息。我已经为此编写了代码,但我无法获得任何用户列表,而是得到“404 Not Found,找不到资源”。我的代码在下面

#!/usr/bin/python
import httplib
import urllib
import os
import json
from urlparse import urlparse
#Define openstack url
url = "x.x.x.x:5000"
osuser = "osuser"
ospassword = "whatever"

params ='{"auth":{"tenantName":"openstackDemo", "passwordCredentials":{"username":"osuser", "password": "ospassword"}}}'
headers = {"Content-Type": "application/json"}
#make http request
conn = httplib.HTTPConnection(url)
conn.request("POST", "/v2.0/tokens", params,headers)
#get http response
response = conn.getresponse()
data = response.read()
verify_services = json.loads(data)
conn.close()
#print "The service verificetion is:%s\n\t" % verify_services
#Get keystone token
keystone_token = verify_services ['access']['token']['id']
print "Printing api token :\n"
print keystone_token
user_id = verify_services['access']['user']['id']
print "Printing user id : \n"
print user_id
# Get keystone URL

keystone_url = verify_services ['access']['serviceCatalog'][5]
print "Printing keystone end points url: \n"
print keystone_url

#Now take the keystone public url and uid

for publicurl in keystone_url['endpoints']:
key_admin_url = publicurl['adminURL']
key_pub_url = publicurl['publicURL']
keystone_user_id = publicurl['id']

print "printing keystone public url:\n"
print key_pub_url

print "Printing keystone user id:\n"
print keystone_user_id


##################
# Get the user list
#################
apiurlt = urlparse(key_pub_url)
print apiurlt
url2 = apiurlt[1]
print url2
#params1 = '{"username":"samit", "email":"sanjaya@kth.se","enabled":true,"password":"secret", "roles":"member"}'
p = urllib.urlencode({})
headers1 = {"X-Auth-Token":"keystone_token", "Content-type":"application/json"}
conn2 = httplib.HTTPConnection(url2)
conn2.request("GET", "%s/users" %apiurlt[2] , p,headers1)
response2 = conn2.getresponse()
data2 = response2.read()
user_list = json.dumps(data2)
conn.close()
print "getting users:\n"
print response.status
print response.reason
print user_list

最佳答案

@sanjaya,如果您正在寻找一种通过 Python 与 Keystone 快速交互的方法,我建议直接使用 keystoneclient 库,它内置了所有这些相关工作。您可以在 https://github.com/openstack/python-keystoneclient/ 获取源代码,或从 PyPi ( http://pypi.python.org/pypi/python-keystoneclient/0.1.3 ) 下载相对较新的版本(源代码中的主干更新)。

使用该客户端,您可以非常轻松地与 Keystone 进行交互:

from keystoneclient.v2_0 import client
kc = client.Client(username=osuser, password=ospassword, auth_url=url)

请注意,仅使用用户名和密码,您的访问权限将非常有限(称为“无范围访问授权 token ”),并且您需要发出进一步的请求才能执行任何有用的操作。

对于 Keystone 更是如此,它具有 API 的 V2,需要“管理员”角色才能与 keystone 上的任何 CRUD 操作交互。在您只想与 Keystone 交互的情况下(例如在设置许多其他部分之前启动帐户),从“管理 token ”开始并直接从客户端使用管理 URL 界面会更容易.为此:

from keystoneclient.v2_0 import client
kc = client.Client(token='123secret456', endpoint='http://x.x.x.x:35350/v2.0')
kc.users.list()

token 是您已经在“admin_token”下的 [DEFAULT] 部分的 Keystone 中配置的。请注意,端点 URL 与授权 URL 是不同的端口 (35350)。不管是好是坏,V2 API 将这些明确分开,并且要对 Keystone 中的元素执行 CRUD 操作,您需要使用该 API 端点的管理 URL。

如果您使用 Everett 上面提供的示例进行授权,该管理 URL 将由 keystoneclient 自动加载,因此对于库,您通常不必担心这一点。

为了完整起见,使用 Python 中的 keystoneclient 库执行 Everett 上面的建议:

from keystoneclient.v2_0 import client
kc = client.Client(username='admin', password='devstack', tenant_name='admin', auth_url='http://172.16.0.1:5000/v2.0')
kc = client.users.list()

关于python - 从 openstack keystone api 获取用户列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13146986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com