def vm_action(): payload = request.get_json() logging.debug(payload) field = {'hostIp', 'hostUser', 'hostPass', 'vmName', 'vmAction'} if field - set(payload.keys()): error_msg = "Input json missing some field! " + "It must include " + str( field) logging.error(error_msg) return jsonify({"error": error_msg}), 400 else: action = payload['vmAction'] try: vm = VM(payload['hostIp'], payload['hostUser'], payload['hostPass'], payload['vmName']) if action == 'create': vm.vcpus = payload['vmVcpus'] vm.memory = payload['vmMemory'] vm.disk = payload['vmDisk'] vm.os_type = payload['vmType'] # optional params if "rootPass" in payload.keys() and payload['rootPass']: vm.root_pass = payload['rootPass'] if "vncPass" in payload.keys() and payload['vncPass']: vm.vnc_pass = payload['vncPass'] if "vmHostname" in payload.keys() and payload['vmHostname']: vm.hostname = payload['vmHostname'] else: vm.hostname = payload['vmName'] logging.info("VM creating") vm.create() logging.info("VM created") elif action == 'start': vm.start() elif action == 'shutdown': vm.shutdown() elif action == 'reboot': vm.reboot() elif action == 'delete': vm.delete() else: error_msg = "give vmAction: {} not support".format(action) return jsonify({"error": error_msg}), 400 except Exception as e: logging.error(str(e)) return jsonify({"error": str(e)}), 500 return jsonify(""), 202