first commit
This commit is contained in:
commit
d241efd180
|
@ -0,0 +1,8 @@
|
||||||
|
# 默认忽略的文件
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# 基于编辑器的 HTTP 客户端请求
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
|
@ -0,0 +1,6 @@
|
||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<settings>
|
||||||
|
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||||
|
<version value="1.0" />
|
||||||
|
</settings>
|
||||||
|
</component>
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Black">
|
||||||
|
<option name="sdkName" value="Python 3.6 (pythonProject)" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6 (pythonProject)" project-jdk-type="Python SDK" />
|
||||||
|
</project>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/openstack-api.iml" filepath="$PROJECT_DIR$/.idea/openstack-api.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,39 @@
|
||||||
|
import requests
|
||||||
|
import json
|
||||||
|
def get_domain(ip, token):
|
||||||
|
url = "http://" + ip + ":5000/v3/domains"
|
||||||
|
headers = {'X-Auth-Token': token}
|
||||||
|
response = requests.get(url, headers=headers)
|
||||||
|
return response.json()
|
||||||
|
def get_domain_id(ip, token, domain_name):
|
||||||
|
url = "http://" + ip + ":5000/v3/domains"
|
||||||
|
headers = {'X-Auth-Token': token}
|
||||||
|
response = requests.get(url, headers=headers)
|
||||||
|
for i in response.json()['domains']:
|
||||||
|
if i['name'] == domain_name:
|
||||||
|
domain_id = i['id']
|
||||||
|
return domain_id
|
||||||
|
def create_domain(ip, token, domain_name, description):
|
||||||
|
url = "http://" + ip + ":5000/v3/domains"
|
||||||
|
headers = {'X-Auth-Token': token}
|
||||||
|
data = {
|
||||||
|
"domain": {
|
||||||
|
"description": description,
|
||||||
|
"enabled": True,
|
||||||
|
"name": domain_name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
response = requests.post(url, headers=headers, data=json.dumps(data))
|
||||||
|
return response.json()
|
||||||
|
def show_domain(ip, token,domain_name):
|
||||||
|
domain_id = get_domain_id(ip, token, domain_name)
|
||||||
|
url = "http://" + ip + ":5000/v3/domains/" + domain_id
|
||||||
|
headers = {'X-Auth-Token': token}
|
||||||
|
response = requests.get(url, headers=headers)
|
||||||
|
return response.json()
|
||||||
|
def delete_domain(ip, token, domain_name):
|
||||||
|
domain_id = get_domain_id(ip, token, domain_name)
|
||||||
|
url = "http://" + ip + ":5000/v3/domains/" + domain_id
|
||||||
|
headers = {'X-Auth-Token': token}
|
||||||
|
response = requests.delete(url, headers=headers)
|
||||||
|
return response.json()
|
|
@ -0,0 +1,31 @@
|
||||||
|
import requests
|
||||||
|
ip=""
|
||||||
|
domain_name=""
|
||||||
|
project_name=""
|
||||||
|
user_name=""
|
||||||
|
password=""
|
||||||
|
def get_token(ip,domain_name,project_name,user_name,password):
|
||||||
|
url=f"http://{ip}:5000/v3/auth/tokens"
|
||||||
|
auth_data = {
|
||||||
|
"auth": {
|
||||||
|
"identity": {
|
||||||
|
"methods": ["password"],
|
||||||
|
"password": {
|
||||||
|
"user": {
|
||||||
|
"name": user_name,
|
||||||
|
"domain": {"name": domain_name},
|
||||||
|
"password": password
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"scope": {
|
||||||
|
"project": {
|
||||||
|
"name": project_name,
|
||||||
|
"domain": {"name": domain_name}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
resp=requests.post(url=url,json=auth_data)
|
||||||
|
token=resp.headers['X-Subject-Token']
|
||||||
|
return token
|
|
@ -0,0 +1,50 @@
|
||||||
|
import requests
|
||||||
|
import json
|
||||||
|
def create_group(ip, token, group_name, description):
|
||||||
|
url = "http://" + ip + ":5000/v3/groups"
|
||||||
|
headers = {'X-Auth-Token': token}
|
||||||
|
data = {
|
||||||
|
"group": {
|
||||||
|
"name": group_name,
|
||||||
|
"domain_id": "default",
|
||||||
|
"description": description
|
||||||
|
}
|
||||||
|
}
|
||||||
|
response = requests.post(url, headers=headers, data=json.dumps(data))
|
||||||
|
return response.json()
|
||||||
|
def get_group_id(ip, token, group_name):
|
||||||
|
url = "http://" + ip + ":5000/v3/groups"
|
||||||
|
headers = {'X-Auth-Token': token}
|
||||||
|
response = requests.get(url, headers=headers)
|
||||||
|
for i in response.json()['groups']:
|
||||||
|
if i['name'] == group_name:
|
||||||
|
return i['id']
|
||||||
|
def show_group(ip, token, group_name):
|
||||||
|
group_id = get_group_id(ip, token, group_name)
|
||||||
|
url = "http://" + ip + ":5000/v3/groups/" + group_id
|
||||||
|
headers = {'X-Auth-Token': token}
|
||||||
|
response = requests.get(url, headers=headers)
|
||||||
|
return response.json()
|
||||||
|
def delete_group(ip, token, group_name):
|
||||||
|
group_id = get_group_id(ip, token, group_name)
|
||||||
|
url = "http://" + ip + ":5000/v3/groups/" + group_id
|
||||||
|
headers = {'X-Auth-Token': token}
|
||||||
|
response = requests.delete(url, headers=headers)
|
||||||
|
return response.json()
|
||||||
|
def get_group(ip, token):
|
||||||
|
url = "http://" + ip + ":5000/v3/groups"
|
||||||
|
headers = {'X-Auth-Token': token}
|
||||||
|
response = requests.get(url, headers=headers)
|
||||||
|
return response.json()
|
||||||
|
def update_group(ip, token, group_name, new_group_name, new_description):
|
||||||
|
group_id = get_group_id(ip, token, group_name)
|
||||||
|
url = "http://" + ip + ":5000/v3/groups/" + group_id
|
||||||
|
headers = {'X-Auth-Token': token}
|
||||||
|
data = {
|
||||||
|
"group": {
|
||||||
|
"name": new_group_name,
|
||||||
|
"description": new_description
|
||||||
|
}
|
||||||
|
}
|
||||||
|
response = requests.patch(url, headers=headers, data=json.dumps(data))
|
||||||
|
return response.json()
|
|
@ -0,0 +1,71 @@
|
||||||
|
import requests
|
||||||
|
import json
|
||||||
|
def create_user(ip, token, user_name, password, description):
|
||||||
|
headers = {'X-Auth-Token': token}
|
||||||
|
body = {
|
||||||
|
"user": {
|
||||||
|
"name": user_name,
|
||||||
|
"password": password,
|
||||||
|
"description": description,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
resp = requests.post(f"http://{ip}:5000/v3/users", data=json.dumps(body), headers=headers)
|
||||||
|
return resp.json() # Assuming the API returns JSON
|
||||||
|
|
||||||
|
|
||||||
|
def get_users(ip, token):
|
||||||
|
headers = {'X-Auth-Token': token}
|
||||||
|
resp = requests.get(f"http://{ip}:5000/v3/users", headers=headers)
|
||||||
|
return resp.json() # Assuming the API returns JSON
|
||||||
|
|
||||||
|
|
||||||
|
def get_user_id(ip, token, user_name):
|
||||||
|
headers = {'X-Auth-Token': token}
|
||||||
|
result = requests.get(f"http://{ip}:5000/v3/users", headers=headers).json()
|
||||||
|
for item in result['users']:
|
||||||
|
if item['name'] == user_name:
|
||||||
|
return item['id']
|
||||||
|
return "NONE"
|
||||||
|
|
||||||
|
|
||||||
|
def get_user(ip, token, user_name):
|
||||||
|
user_id = get_user_id(ip, token, user_name)
|
||||||
|
if user_id == "NONE":
|
||||||
|
return {"error": "User not found"}
|
||||||
|
|
||||||
|
headers = {'X-Auth-Token': token}
|
||||||
|
api_url = f"http://{ip}:5000/v3/users/{user_id}"
|
||||||
|
resp = requests.get(api_url, headers=headers)
|
||||||
|
return resp.json() # Assuming the API returns JSON
|
||||||
|
|
||||||
|
|
||||||
|
def delete_user(ip, token, user_name):
|
||||||
|
user_id = get_user_id(ip, token, user_name)
|
||||||
|
if user_id == "NONE":
|
||||||
|
return {"error": "User not found"}
|
||||||
|
|
||||||
|
headers = {'X-Auth-Token': token}
|
||||||
|
api_url = f"http://{ip}:5000/v3/users/{user_id}"
|
||||||
|
resp = requests.delete(api_url, headers=headers)
|
||||||
|
if resp.status_code == 204:
|
||||||
|
return {"message":"用户删除成功"}
|
||||||
|
else:
|
||||||
|
return {"error": "用户删除失败", "status_code": resp.status_code}
|
||||||
|
def update_user_password(ip, token, user_name, new_password, original_password):
|
||||||
|
user_id = get_user_id(ip, token, user_name)
|
||||||
|
if user_id == "NONE":
|
||||||
|
return {"error": "User not found"}
|
||||||
|
|
||||||
|
headers = {'X-Auth-Token': token}
|
||||||
|
body = {
|
||||||
|
"user": {
|
||||||
|
"password": new_password,
|
||||||
|
"original_password": original_password
|
||||||
|
}
|
||||||
|
}
|
||||||
|
api_url = f"http://{ip}:5000/v3/users/{user_id}/password"
|
||||||
|
resp = requests.post(api_url, data=json.dumps(body), headers=headers)
|
||||||
|
if resp.status_code == 204:
|
||||||
|
return {"message": "密码更新成功"}
|
||||||
|
else:
|
||||||
|
return {"error": "密码更新失败", "status_code": resp.status_code}
|
|
@ -0,0 +1,126 @@
|
||||||
|
from keystone import get_token
|
||||||
|
from keystone import user
|
||||||
|
from keystone import domain
|
||||||
|
import time
|
||||||
|
def main():
|
||||||
|
print("====================")
|
||||||
|
print("选择一个操作:")
|
||||||
|
print("====================")
|
||||||
|
print("Keystone操作")
|
||||||
|
print("1. 用户管理")
|
||||||
|
print("2. 组管理")
|
||||||
|
print("3. 域管理")
|
||||||
|
print("====================")
|
||||||
|
choice = input("输入选项 (1-3): ")
|
||||||
|
|
||||||
|
ip = "172.30.26.171"
|
||||||
|
token = get_token.get_token(ip,'demo','admin','admin','000000')
|
||||||
|
|
||||||
|
if choice == '1':
|
||||||
|
print("====================")
|
||||||
|
print("选择一个操作:")
|
||||||
|
print("1. 创建用户")
|
||||||
|
print("2. 获取所有用户")
|
||||||
|
print("3. 获取特定用户信息")
|
||||||
|
print("4. 删除用户")
|
||||||
|
print("5. 更新用户密码")
|
||||||
|
print("====================")
|
||||||
|
choice = input("输入选项 (1-5): ")
|
||||||
|
print("====================")
|
||||||
|
if choice == '1':
|
||||||
|
user_name = input("请输入用户名: ")
|
||||||
|
password = input("请输入密码: ")
|
||||||
|
description = input("请输入描述: ")
|
||||||
|
result = user.create_user(ip, token, user_name, password, description)
|
||||||
|
print(result)
|
||||||
|
print("====================")
|
||||||
|
main()
|
||||||
|
|
||||||
|
elif choice == '2':
|
||||||
|
result = user.get_users(ip, token)
|
||||||
|
print(result)
|
||||||
|
main()
|
||||||
|
|
||||||
|
elif choice == '3':
|
||||||
|
user_name = input("请输入用户名: ")
|
||||||
|
result = user.get_user(ip, token, user_name)
|
||||||
|
print(result)
|
||||||
|
main()
|
||||||
|
|
||||||
|
elif choice == '4':
|
||||||
|
user_name = input("请输入用户名: ")
|
||||||
|
result = user.delete_user(ip, token, user_name)
|
||||||
|
print(result)
|
||||||
|
main()
|
||||||
|
|
||||||
|
elif choice == '5':
|
||||||
|
user_name = input("请输入用户名: ")
|
||||||
|
new_password = input("请输入新密码: ")
|
||||||
|
original_password = input("请输入原始密码: ")
|
||||||
|
result = user.update_user_password(ip, token, user_name, new_password, original_password)
|
||||||
|
print(result)
|
||||||
|
main()
|
||||||
|
|
||||||
|
else:
|
||||||
|
print("无效选项")
|
||||||
|
main()
|
||||||
|
|
||||||
|
elif choice == '2':
|
||||||
|
print("====================")
|
||||||
|
print("选择一个操作:")
|
||||||
|
print("1. 创建组")
|
||||||
|
print("2. 获取所有组")
|
||||||
|
print("3. 获取特定组信息")
|
||||||
|
print("4. 删除组")
|
||||||
|
print("5. 更新组信息")
|
||||||
|
print("====================")
|
||||||
|
choice = input("输入选项 (1-5): ")
|
||||||
|
print("====================")
|
||||||
|
if choice == '1':
|
||||||
|
user_name = input("请输入组名: ")
|
||||||
|
password = input("请输入域: ")
|
||||||
|
description = input("请输入描述: ")
|
||||||
|
result = user.create_user(ip, token, user_name, password, description)
|
||||||
|
print(result)
|
||||||
|
print("====================")
|
||||||
|
main()
|
||||||
|
|
||||||
|
elif choice == '2':
|
||||||
|
result = user.get_users(ip, token)
|
||||||
|
print(result)
|
||||||
|
main()
|
||||||
|
|
||||||
|
elif choice == '3':
|
||||||
|
user_name = input("请输入用户名: ")
|
||||||
|
result = user.get_user(ip, token, user_name)
|
||||||
|
print(result)
|
||||||
|
main()
|
||||||
|
|
||||||
|
elif choice == '4':
|
||||||
|
user_name = input("请输入用户名: ")
|
||||||
|
result = user.delete_user(ip, token, user_name)
|
||||||
|
print(result)
|
||||||
|
main()
|
||||||
|
|
||||||
|
elif choice == '5':
|
||||||
|
user_name = input("请输入用户名: ")
|
||||||
|
new_password = input("请输入新密码: ")
|
||||||
|
original_password = input("请输入原始密码: ")
|
||||||
|
result = user.update_user_password(ip, token, user_name, new_password, original_password)
|
||||||
|
print(result)
|
||||||
|
main()
|
||||||
|
|
||||||
|
else:
|
||||||
|
print("无效选项")
|
||||||
|
main()
|
||||||
|
#
|
||||||
|
# elif choice == '3':
|
||||||
|
#
|
||||||
|
# elif choice == '4':
|
||||||
|
#
|
||||||
|
# elif choice == '5':
|
||||||
|
else:
|
||||||
|
print("无效选项")
|
||||||
|
main()
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in New Issue