single node,w/o ceph networking implemented
This commit is contained in:
parent
2a66be07a6
commit
da5a600ccb
23 changed files with 866 additions and 147 deletions
54
api/main.py
54
api/main.py
|
|
@ -12,7 +12,7 @@ from flask_restful import Resource, Api
|
|||
from ucloud_common.vm import VMStatus
|
||||
from ucloud_common.request import RequestEntry, RequestType
|
||||
|
||||
from helper import generate_mac, get_ip_addr
|
||||
from helper import generate_mac, get_ip_addr, get_etcd_counter, increment_etcd_counter
|
||||
|
||||
from config import (
|
||||
etcd_client,
|
||||
|
|
@ -21,6 +21,7 @@ from config import (
|
|||
HOST_PREFIX,
|
||||
FILE_PREFIX,
|
||||
IMAGE_PREFIX,
|
||||
NETWORK_PREFIX,
|
||||
logging,
|
||||
REQUEST_POOL,
|
||||
VM_POOL,
|
||||
|
|
@ -35,7 +36,6 @@ class CreateVM(Resource):
|
|||
@staticmethod
|
||||
def post():
|
||||
data = request.json
|
||||
print(data)
|
||||
validator = schemas.CreateVMSchema(data)
|
||||
if validator.is_valid():
|
||||
vm_uuid = uuid4().hex
|
||||
|
|
@ -57,10 +57,10 @@ class CreateVM(Resource):
|
|||
"image_uuid": validator.image_uuid,
|
||||
"log": [],
|
||||
"vnc_socket": "",
|
||||
"mac": str(generate_mac()),
|
||||
"network": data["network"],
|
||||
"metadata": {
|
||||
"ssh-keys": []
|
||||
}
|
||||
},
|
||||
}
|
||||
etcd_client.put(vm_key, vm_entry, value_in_json=True)
|
||||
|
||||
|
|
@ -80,9 +80,8 @@ class VmStatus(Resource):
|
|||
if validator.is_valid():
|
||||
vm = VM_POOL.get(os.path.join(VM_PREFIX, data["uuid"]))
|
||||
vm_value = vm.value.copy()
|
||||
vm_value["ip"] = list(map(str, get_ip_addr(vm.mac, "br0")))
|
||||
# vm_value["ip"] = list(map(str, get_ip_addr(vm.mac, "br0")))
|
||||
vm.value = vm_value
|
||||
print(vm.value)
|
||||
return vm.value
|
||||
else:
|
||||
return validator.get_errors(), 400
|
||||
|
|
@ -217,7 +216,7 @@ class ListUserVM(Resource):
|
|||
"specs": vm.value["specs"],
|
||||
"status": vm.value["status"],
|
||||
"hostname": vm.value["hostname"],
|
||||
"mac": vm.value["mac"],
|
||||
# "mac": vm.value["mac"],
|
||||
"vnc_socket": None
|
||||
if vm.value.get("vnc_socket", None) is None
|
||||
else vm.value["vnc_socket"],
|
||||
|
|
@ -357,6 +356,44 @@ class RemoveSSHKey(Resource):
|
|||
else:
|
||||
return validator.get_errors(), 400
|
||||
|
||||
|
||||
class CreateNetwork(Resource):
|
||||
@staticmethod
|
||||
def post():
|
||||
data = request.json
|
||||
validator = schemas.CreateNetwork(data)
|
||||
|
||||
if validator.is_valid():
|
||||
|
||||
network_entry = {
|
||||
"id": increment_etcd_counter(etcd_client, "/v1/counter/vxlan"),
|
||||
"type": data["type"]
|
||||
}
|
||||
network_key = os.path.join(NETWORK_PREFIX, data["name"], data["network_name"])
|
||||
etcd_client.put(network_key, network_entry, value_in_json=True)
|
||||
return {"message": "Network successfully added."}
|
||||
else:
|
||||
return validator.get_errors(), 400
|
||||
|
||||
|
||||
class ListUserNetwork(Resource):
|
||||
@staticmethod
|
||||
def get():
|
||||
data = request.json
|
||||
validator = schemas.OTPSchema(data)
|
||||
|
||||
if validator.is_valid():
|
||||
prefix = os.path.join(NETWORK_PREFIX, data["name"])
|
||||
networks = etcd_client.get_prefix(prefix, value_in_json=True)
|
||||
user_networks = []
|
||||
for net in networks:
|
||||
net.value["name"] = net.key.split("/")[-1]
|
||||
user_networks.append(net.value)
|
||||
return {"networks": user_networks}, 200
|
||||
else:
|
||||
return validator.get_errors(), 400
|
||||
|
||||
|
||||
api.add_resource(CreateVM, "/vm/create")
|
||||
api.add_resource(VmStatus, "/vm/status")
|
||||
|
||||
|
|
@ -368,6 +405,7 @@ api.add_resource(ListPublicImages, "/image/list-public")
|
|||
|
||||
api.add_resource(ListUserVM, "/user/vms")
|
||||
api.add_resource(ListUserFiles, "/user/files")
|
||||
api.add_resource(ListUserNetwork, "/user/networks")
|
||||
|
||||
api.add_resource(AddSSHKey, "/user/add-ssh")
|
||||
api.add_resource(RemoveSSHKey, "/user/remove-ssh")
|
||||
|
|
@ -376,5 +414,7 @@ api.add_resource(GetSSHKeys, "/user/get-ssh")
|
|||
api.add_resource(CreateHost, "/host/create")
|
||||
api.add_resource(ListHost, "/host/list")
|
||||
|
||||
api.add_resource(CreateNetwork, "/network/create")
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(host="::", debug=True)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue