first commit

This commit is contained in:
Administrator 2024-06-07 10:16:54 +08:00
commit d241efd180
13 changed files with 354 additions and 0 deletions

8
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View File

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

7
.idea/misc.xml Normal file
View File

@ -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>

8
.idea/modules.xml Normal file
View File

@ -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>

8
.idea/openstack-api.iml Normal file
View File

@ -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.

39
keystone/domain.py Normal file
View File

@ -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()

31
keystone/get_token.py Normal file
View File

@ -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

50
keystone/group.py Normal file
View File

@ -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()

71
keystone/user.py Normal file
View File

@ -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}

126
main.py Normal file
View File

@ -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()