Python Openstack API
·
使用api进行创建用户和虚拟机。
API文档:identity、Comput、Image、Network
import re
import requests
import json
identity_url = "http://192.168.100.100:5000/v3"
compute_url = "http://192.168.100.100:8774/v2.1"
image_url = "http://192.168.100.100:9292/v2"
network_url = "http://192.168.100.100:9696/v2.0"
class openstack_api:
token = {}
headers = {"Content-Type": "application/json"}
def __init__(self,domain,user,password):
self.domain = domain
self.user = user
self.password = password
def post_token(self):
url = identity_url + "/auth/tokens"
data = {
"auth": {
"identity": {
"methods": [
"password"
],
"password": {
"user": {
"name": self.user,
"domain": {
"name": self.domain
},
"password": self.password
}
}
},
"scope": {
# "system": {
# "all": True
# },
"project": {
"domain": {
"name": self.domain
},
"name": "admin"
}
}
}
}
response = requests.post(url, headers=self.headers, data=json.dumps(data))
try:
self.token = response.json()["token"]
except:
print("post_token error:",response.status_code,response.text)
return None
self.token['id'] = response.headers["X-Subject-Token"]
# print("token:",self.token["id"])
self.headers["X-Auth-Token"] = self.token["id"]
return response.json()
def create_user(self,user,password):
url = identity_url + "/users"
# print(self.token)
# print("token:",self.token["id"])
data = {
"user": {
"name": user,
"domain_id": self.token["user"]["domain"]["id"],
"password": password
}
}
response = requests.post(url, headers=self.headers, data=json.dumps(data))
return response.json()
def get_user_id(self,user):
url = identity_url + "/users"
response = requests.get(url, headers=self.headers)
users = response.json()["users"]
for u in users:
if u["name"] == user:
return u["id"]
return None
def get_role_id(self,role):
url = identity_url + "/roles"
response = requests.get(url, headers=self.headers)
roles = response.json()["roles"]
for r in roles:
if r["name"] == role:
return r["id"]
return None
def role_user(self,user,role):
domain_id = self.token["user"]["domain"]["id"]
user_id = self.get_user_id(user)
print("user_id:",user_id)
if user_id == None:
print("user not found")
return False
role_id = self.get_role_id(role)
print("role_id:",role_id)
if role_id == None:
print("role not found")
return False
url = identity_url + "/domains/" + domain_id + "/users/" + user_id + "/roles/" + role_id
response = requests.put(url, headers=self.headers)
print("response:",response.status_code)
if response.status_code == 200 or response.status_code == 204:
print("role_user success")
return True
else:
print("role_user failed")
return False
def get_images(self):
url = image_url + "/images"
response = requests.get(url, headers=self.headers)
return response.json()
def get_networks(self):
url = network_url + "/networks"
response = requests.get(url, headers=self.headers)
return response.json()
def get_servers(self):
url = compute_url + "/servers"
response = requests.get(url, headers=self.headers)
return response.json()
def get_project_id(self):
response = requests.get(identity_url + "/projects", headers=self.headers)
return response.json()
def create_vm(self,server_name,image_id,flavor_id,network_id):
url = compute_url + "/servers"
data = {
"server": {
# "project_id": "admin",
"name": server_name,
"imageRef": image_id,
"flavorRef": flavor_id,
"networks": [
{
"uuid": network_id
}
]
}
}
response = requests.post(url, headers=self.headers, data=json.dumps(data))
if response.status_code == 202:
print("创建服务器成功")
return response.json()
else:
print("创建服务器失败")
return response.json()
def get_flavor(self,flavor_id=None):
url = compute_url + "/flavors"
if flavor_id != None:
url += "/" + flavor_id
response = requests.get(url, headers=self.headers)
return response.json()
OPS = openstack_api("default","admin","000000")
OPS.post_token()
print(OPS.get_flavor())
print(OPS.get_flavor("85cd6658-1a50-4f3d-952d-e7f5d64a1194"))
# print(OPS.create_vm("cirros","343fe860-3af1-41a1-9ec0-2ed5f8c7f8fc","85cd6658-1a50-4f3d-952d-e7f5d64a1194","84574686-43eb-4756-bce7-10aa589e8c19"))
# print(OPS.create_user("huan","123456"))
# print(OPS.role_user("huan","admin"))
# print(OPS.get_images())
# print(OPS.get_networks())
# print(OPS.get_servers())
# print(OPS.get_project_id())
更多推荐

所有评论(0)