def removeServerFromCluster(clusterName, serverName): code = None reval = None params = [] params.append(clusterName) params.append(serverName) status, clusterid, server_id = get_server(clusterName, serverName) if status == "-1": code, reval = "20052", "No cluster " + clusterName + "." elif status == "-2": code, reval = "20054", "server " + serverName + " is not in cluster " + clusterName elif Utils.isOnline(serverName) == False: code, reval = "22008", "Server " + serverName + " is not online" if code is not None: result = Utils.errorCode(code, reval, params) logger.error(reval) raise web.HTTPError(status="400 Bad Request", data=result) try: servers = Globals.db.select("server_info", what="*", where="cluster_id=$clusterid", vars=locals()) if len(servers) == 0: logger.info("This server[" + serverName + "] not contained in table server_info") return "" if len(servers) == 1: Globals.db.delete("server_info", where="id=$server_id", vars=locals()) logger.info("delete server[" + serverName + "] from table server_info") return "" for server in servers: if (Utils.getIPByName(server.name) != Utils.getIPByName(serverName)) and ( server.name.strip() != serverName ): break if Utils.isLocalHost(serverName): status, ip = Utils.getLocal_IP() else: ip = Utils.getIPByName(serverName) status, msg = Utils.executeOnServer(server.name, "gluster --mode=script peer detach " + ip) if status == -1: code, reval = ( "26104", "error when connecting to remote host " + serverName + " from localhost " + server.name + "." + msg, ) elif status == -2: code, reval = "26059", "Error when using pub key to connect remote server " + serverName + "." + msg elif status == 1: code, reval = "22014", 'Error when executing "gluster --mode=script peer detach ' + ip + '"' + msg if code is not None: result = Utils.errorCode(code, reval, params) web.HTTPError(status="400 Bad Request", data="") logger.error(reval) return result Globals.db.delete("server_info", where="id=$server_id", vars=locals()) return "" except Exception, e: code, reval = "22101", "failed to remove server " + serverName + "." + str(e) logger.error(reval) result = Utils.errorCode(code, reval, params) raise web.HTTPError(status="400 Bad Request", data=result)
def deleteUser(data): try: userName = data.userName except Exception,e: code, reval = "25106", "Error when deleting user: "******"400 Bad Request", data = result)
def getNeofsStatus(clusterName, serverName): code = None reval = None params = [] params.append(clusterName) params.append(serverName) status, clusterid, server_id = get_server(clusterName, serverName) if status == "-1": code, reval = "20052", "No cluster " + clusterName + "." elif status == "-2": code, reval = "20054", "server " + serverName + " is not in cluster " + clusterName + "." elif Utils.isOnline(serverName) == False: code, reval = "22008", "Server " + serverName + " is not online." if code is not None: result = Utils.errorCode(code, reval, params) logger.error(reval) raise web.HTTPError(status="400 Bad Request", data=result) try: commandWithArgs = "sh " + Globals.BACKEND_SCRIPT + "neofs_status.sh" status, message = Utils.executeOnServer(serverName, commandWithArgs) responseDom = XmlHandler.ResponseXml() tasksTag = responseDom.appendTagRoute("responseStatus") tasksTag.appendChild(responseDom.createTag("status", message)) logger.info("Get neofs mount status: " + message) return tasksTag.toxml() except Exception, e: code, reval = "22202", "Error when get neofs status on server:" + str(e)
def addUser(data): try: userName = data.userName password = data.password except Exception,e: code, reval = "25102", "Error when adding user: "******"400 Bad Request", data = result)
def changeUserPassword(data): try: userName = data.userName newPassword = data.newPassword oldPassword = data.oldPassword except Exception,e: code, reval = "25103", "Error when changing user's password: "******"400 Bad Request", data = result)
def initDisk(clusterName, serverName, diskName, data): try: fsType = data.fsType mountPoint = data.mountPoint except Exception, e: code, reval = "22011", "Error when getting servers list:fsType and mountPoint are required." + str(e) logger.error(reval) result = Utils.errorCode(code, reval, []) raise web.HTTPError(status="400 Bad Request", data=result)
def deleteCifsUser(data): code = "25003" reval = "" try: userName = data.userName except Exception,e: reval = "Error when deleting cifs user: "******"400 Bad Request", data = result)
def addServerToCluster(clusterName, data): code = None reval = None try: serverName = data.serverName except Exception, e: code, reval = "22010", "Error when getting servers list:serverName is required" + str(e) logger.error(reval) result = Utils.errorCode(code, reval, []) raise web.HTTPError(status="400 Bad Request", data=result)
def changeCifsUserPasswd(data): code = "25004" reval = "" try: userName = data.userName password = data.password except Exception,e: reval = "Error when changing cifs user: "******"400 Bad Request", data = result)
def getServer(clusterName, serverName): status, cluster_info, server_info = get_server(clusterName, serverName) code = None reval = None if status == "-1": code, reval = "20052", "No cluster " + clusterName elif status == "-2": code, reval = "20054", "No server " + serverName + " in cluster " + clusterName elif Utils.isOnline(serverName) == False: code, reval = "22008", "Server " + serverName + " is not online" if code is not None: result = Utils.errorCode(code, reval, []) logger.error(reval) raise web.HTTPError(status="400 Bad Request", data=result) try: serverName = str(serverName) message = Globals.mc.get(serverName + "_server") if message is not None: logger.info("Get server[" + serverName + "]'s details from memcache:" + message) return message cmd = "python " + Globals.BACKEND_SCRIPT + "get_server_details.py" status, message = Utils.executeOnServer(serverName, cmd) if status == -1: code, reval = "26104", message elif status == -2: code, reval = "26059", "Error when using pub key to connect remote server " + serverName + "." + message elif status == 1: code, reval = "22002", "error when getting details from server " + serverName + "." + message if code is not None: result = Utils.errorCode(code, reval, []) logger.error(reval) raise web.HTTPError(status="400 Bad Request", data=result) logger.info("Get server[" + serverName + "]'s details by executing get_server_details.py:" + message) return message except Exception, e: code, reval = "22002", "Error when getting servers list:" + str(e) result = Utils.errorCode(code, reval, []) logger.error(reval) raise web.HTTPError(status="400 Bad Request", data=result)
def getUsers(): try: responseDom = XmlHandler.ResponseXml() usersTag = responseDom.appendTagRoute("users") userNameList = db.select('users',what="username") if len(userNameList) == 0: return '<users></users>' for user in userNameList: usersTag.appendChild(responseDom.createTag("user", user.username)) return usersTag.toxml() except Exception, e: code, reval = "25101", "Error when getting users list:" + str(e) result = Utils.errorCode(code, reval, []) raise web.HTTPError(status = "400 Bad Request", data = result)
def getCifsUsers(): try: lines = Utils.readFile(Globals.CIFS_USER_FILE, lines=True) cifsUserDom = XmlHandler.ResponseXml() cifsUserTag = cifsUserDom.appendTagRoute("cifsUsers") for line in lines: if not line.strip(): continue tokens = line.strip().split(":") cifsUserTag.appendChild(cifsUserDom.createTag("cifsUser", tokens[1])) return cifsUserTag.toxml() except Exception,e: code, reval = "25000", "Error when getting cifsusers: " + str(e) result = Utils.errorCode(code, reval, []) raise web.HTTPError(status = "400 Bad Request", data = result)
def operationServer(clusterName, serverName): code = None reval = None params = [] params.append(clusterName) params.append(serverName) status, clusterid, server_id = get_server(clusterName, serverName) if status == "-1": code, reval = "20052", "No cluster " + clusterName + "." elif status == "-2": code, reval = "20054", "server " + serverName + " is not in cluster " + clusterName elif Utils.isOnline(serverName) == False: code, reval = "22008", "Server " + serverName + " is not online" if code is not None: result = Utils.errorCode(code, reval, params) logger.error(reval) raise web.HTTPError(status="400 Bad Request", data=result) try: data = web.input() operationName = data.operation if operationName == "mount": commandWithArgs = "sh " + Globals.BACKEND_SCRIPT + "neofs_setup.sh " + serverName status, message = Utils.executeOnServer(serverName, commandWithArgs) return "" elif operationName == "umount": commandWithArgs = "sh " + Globals.BACKEND_SCRIPT + "neofs_teardown.sh " + serverName status, message = Utils.executeOnServer(serverName, commandWithArgs) return "" elif operationName == "remount": commandWithArgs = "sh " + Globals.BACKEND_SCRIPT + "neofs_teardown.sh " + serverName status, message = Utils.executeOnServer(serverName, commandWithArgs) commandWithArgs = "sh " + Globals.BACKEND_SCRIPT + "neofs_setup.sh " + serverName status, message = Utils.executeOnServer(serverName, commandWithArgs) return "" else: return "22200", "Error no such operation on server" except Exception, e: code, reval = "22201", "Error when operation a cluster:" + str(e)
logger.error(reval) result = Utils.errorCode(code, reval, []) raise web.HTTPError(status="400 Bad Request", data=result) status, clusterid, serverid = get_server(clusterName, serverName) params = [] params.append(clusterName) params.append(serverName) if status == "-1": code, reval = "20052", "No cluster " + clusterName + "." elif serverid is not None: code, reval = "20104", "server " + serverName + " is already in cluster " + clusterName + "." elif not Utils.isOnline(serverName): code, reval = "22008", serverName + " is not online." if code is not None: result = Utils.errorCode(code, reval, params) logger.error(reval) raise web.HTTPError(status="400 Bad Request", data=result) try: server_info = Globals.db.select("server_info", what="*", where="name=$serverName", vars=locals()) if len(server_info) > 0: code, reval = ( "22001", "Error when adding server " + serverName + " to cluster " + clusterName + ". server " + serverName + " already exists.", )
password = data.password except Exception,e: code, reval = "25102", "Error when adding user: "******"400 Bad Request", data = result) try: db.select('users',where='username=$userName' ,what="*",vars=locals()) password = hashlib.sha1("sAlT754-"+password).hexdigest() db.insert('users',username=userName, password=password, enabled=1) return None except Exception, e: code, reval = "25102", "Error when adding user" + userName + ":" + str(e) params = [] params.append(userName) result = Utils.errorCode(code, reval, params) raise web.HTTPError(status = "400 Bad Request", data = result) def changeUserPassword(data): try: userName = data.userName newPassword = data.newPassword oldPassword = data.oldPassword except Exception,e: code, reval = "25103", "Error when changing user's password: "******"400 Bad Request", data = result) try: password_info = db.select('users',where='username=$userName' ,what="password",vars=locals()) password_hash = password_info[0].password
def errorreturn(code,reval,params): result = Utils.errorCode(code, reval, params) raise web.HTTPError(status = "400 Bad Request", data = result)
def noAuthInfoError(): code,reval = "28002", "Authentication failed: lacking of authentication information." result = Utils.errorCode(code, reval, []) httpError = web.HTTPError(status = "400 Bad Request", data = result) return httpError
def getServers(clusterName, details="true"): code = None reval = None status, cluster_info, server_info = get_servers(clusterName) if status == "-1": code, reval = "20052", "No cluster " + clusterName + "." result = Utils.errorCode(code, reval, []) logger.error(reval) raise web.HTTPError(status="400 Bad Request", data=result) if status == "-2": web.HTTPError(status="200 OK") logger.info("Servers list is None") return "<servers></servers>" try: responseDom = XmlHandler.ResponseXml() serversTag = responseDom.appendTagRoute("servers") if details.lower() != "true": for server in server_info: glusterServerTag = responseDom.createTag("glusterServer") glusterServerTag.appendChild(responseDom.createTag("name", server.name)) glusterServerTag.appendChild(responseDom.createTag("id", server.id)) serversTag.appendChild(glusterServerTag) web.HTTPError(status="200 OK") logger.info("Get servers's name list - 200 OK") return serversTag.toxml() else: retval = "" cmd = "python " + Globals.BACKEND_SCRIPT + "get_server_details.py 2>/dev/null" offline = [] for server in server_info: if Utils.isOnline(server.name) == False: offline.append(server.name) else: serverName = str(server.name) message = Globals.mc.get(serverName + "_server") if message is not None: retval += message else: status, message = Utils.executeOnServer(server.name, cmd) if status == -1: code, reval = "26104", message elif status == -2: code, reval = ( "26059", "Error when using pub key to connect remote server " + server.name + "." + message, ) elif status == 1: code, reval = ( "22002", "error when getting details from server " + server.name + "." + message, ) if code is not None: result = Utils.errorCode(code, reval, []) web.HTTPError(status="400 Bad Request", data="") logger.error(reval) return result retval += message result = "" if len(offline): for server in offline: serverxml = "<glusterServer><name>" + server + "</name><status>OFFLINE</status></glusterServer>" result += serverxml retval += result if (retval is not None) and (retval.strip() is not ""): web.HTTPError(status="200 OK") logger.info("Get servers's details info:" + retval) return "<servers>" + retval + "</servers>" except Exception, e: code, reval = "22002", "Error when getting servers list:" + str(e) result = Utils.errorCode(code, reval, []) logger.error(reval) raise web.HTTPError(status="400 Bad Request", data=result)
def auth(auth_info): if auth_info is None: raise noAuthInfoError() auth_info = re.sub('^Basic ','',auth_info) userName,password = base64.decodestring(auth_info).split(':') password_hash = hashlib.sha1("sAlT754-"+password).hexdigest() try: ident = db.select('users',where='username=$userName and password=$password_hash',vars=locals()) if len(ident) != 0: return True else: code, reval = "28003", "Authentication failed: please enter the correct user name and password. " httpStatus = "400 Bad Request" except Exception, e: code, reval = "28001", "Authentication failed: " + str(e) httpStatus = "500 Internal Server Error" web.header('Content-Type', 'application/xml') result = Utils.errorCode(code, reval, []) raise web.HTTPError(status = httpStatus, data = result) def noAuthInfoError(): code,reval = "28002", "Authentication failed: lacking of authentication information." result = Utils.errorCode(code, reval, []) httpError = web.HTTPError(status = "400 Bad Request", data = result) return httpError