使用api进行创建用户和虚拟机。

API文档:identityComputImageNetwork

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

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐