create_image view added + etcd3_wrapper module added
This commit is contained in:
parent
78d6fc2105
commit
0253aa9afc
3 changed files with 46 additions and 0 deletions
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[submodule "etcd3_wrapper"]
|
||||||
|
path = etcd3_wrapper
|
||||||
|
url = https://code.ungleich.ch/ahmedbilal/etcd3_wrapper
|
1
etcd3_wrapper
Submodule
1
etcd3_wrapper
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 59974e2047bbea08b72d32129fd905bbea6e9d70
|
42
main.py
42
main.py
|
@ -1,3 +1,6 @@
|
||||||
|
# TODO
|
||||||
|
# convert etcd3 usage to etcd3_wrapper
|
||||||
|
|
||||||
import etcd3
|
import etcd3
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
@ -6,11 +9,13 @@ from flask import Flask
|
||||||
from flask_restful import Resource, Api, reqparse
|
from flask_restful import Resource, Api, reqparse
|
||||||
from decouple import config
|
from decouple import config
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
from etcd3_wrapper import Etcd3Wrapper
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
api = Api(app)
|
api = Api(app)
|
||||||
|
|
||||||
etcd_client = etcd3.client(host=config("ETCD_HOST"), port=int(config("ETCD_PORT")))
|
etcd_client = etcd3.client(host=config("ETCD_HOST"), port=int(config("ETCD_PORT")))
|
||||||
|
client = Etcd3Wrapper()
|
||||||
|
|
||||||
createvm_argparser = reqparse.RequestParser()
|
createvm_argparser = reqparse.RequestParser()
|
||||||
createvm_argparser.add_argument("name", type=str, required=True)
|
createvm_argparser.add_argument("name", type=str, required=True)
|
||||||
|
@ -27,6 +32,11 @@ deletevm_argparser.add_argument("vmid", type=str, required=True)
|
||||||
vmstatus_argparser = reqparse.RequestParser()
|
vmstatus_argparser = reqparse.RequestParser()
|
||||||
vmstatus_argparser.add_argument("id", type=str, required=True)
|
vmstatus_argparser.add_argument("id", type=str, required=True)
|
||||||
|
|
||||||
|
createimage_argparser = reqparse.RequestParser()
|
||||||
|
createimage_argparser.add_argument("uuid", type=str, required=True)
|
||||||
|
createimage_argparser.add_argument("name", type=str, required=True)
|
||||||
|
createimage_argparser.add_argument("image_store", type=str, required=True)
|
||||||
|
|
||||||
|
|
||||||
class CreateVM(Resource):
|
class CreateVM(Resource):
|
||||||
def post(self):
|
def post(self):
|
||||||
|
@ -82,9 +92,41 @@ class VmStatus(Resource):
|
||||||
return {"Message": "Not Found"}
|
return {"Message": "Not Found"}
|
||||||
|
|
||||||
|
|
||||||
|
class CreateImage(Resource):
|
||||||
|
def post(self):
|
||||||
|
image_stores = list(client.get_prefix("/v1/image_store/"))
|
||||||
|
args = createimage_argparser.parse_args()
|
||||||
|
image_file_uuid = args.uuid
|
||||||
|
image_store_name = args.image_store
|
||||||
|
|
||||||
|
file_entry = client.get(f"/v1/files/{image_file_uuid}")
|
||||||
|
if file_entry is None:
|
||||||
|
return {"Message": "Image File Not Found"}, 400
|
||||||
|
|
||||||
|
file_entry_value = json.loads(file_entry.value)
|
||||||
|
|
||||||
|
image_store = list(filter(lambda s: json.loads(s.value)["name"] == image_store_name, image_stores))
|
||||||
|
if not image_store:
|
||||||
|
return {"Message": f"Store '{image_store_name}' does not exists"}, 400
|
||||||
|
|
||||||
|
image_store = image_store[0]
|
||||||
|
image_entry_json = {
|
||||||
|
"status": "TO_BE_CREATED",
|
||||||
|
"owner": file_entry_value["owner"],
|
||||||
|
"filename": file_entry_value["filename"],
|
||||||
|
"name": args.name,
|
||||||
|
"store_name": image_store_name
|
||||||
|
}
|
||||||
|
client.put(f"/v1/image/{image_file_uuid}", json.dumps(image_entry_json))
|
||||||
|
|
||||||
|
return {"Message": "Image successfully created"}
|
||||||
|
|
||||||
|
|
||||||
api.add_resource(CreateVM, "/vm/create")
|
api.add_resource(CreateVM, "/vm/create")
|
||||||
api.add_resource(DeleteVM, "/vm/delete")
|
api.add_resource(DeleteVM, "/vm/delete")
|
||||||
api.add_resource(VmStatus, "/vm/status")
|
api.add_resource(VmStatus, "/vm/status")
|
||||||
|
api.add_resource(CreateImage, "/image/create")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
app.run(host="::", debug=True)
|
app.run(host="::", debug=True)
|
||||||
|
|
Loading…
Reference in a new issue