Exemple #1
0
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)
Exemple #2
0
def deleteUser(data):
    try:
        userName = data.userName
    except Exception,e:
        code, reval = "25106", "Error when deleting user: "******"400 Bad Request", data = result)
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
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)
Exemple #7
0
def deleteCifsUser(data):
    code = "25003"
    reval = ""
    try:
        userName = data.userName
    except Exception,e:
        reval = "Error when deleting cifs user: "******"400 Bad Request", data = result)
Exemple #8
0
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)
Exemple #9
0
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)
Exemple #10
0
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)
Exemple #11
0
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)
Exemple #12
0
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)
Exemple #13
0
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)
Exemple #14
0
        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.",
            )
Exemple #15
0
        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
Exemple #16
0
def errorreturn(code,reval,params):
    result = Utils.errorCode(code, reval, params)
    raise web.HTTPError(status = "400 Bad Request", data = result)
Exemple #17
0
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
Exemple #18
0
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)
Exemple #19
0
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