Esempio n. 1
0
def operationCluster(clusterName):
    try:
        cluster_id_info = db.select('cluster_info',where='name=$clusterName' ,what="id",vars=locals())
        if len(cluster_id_info) == 0:
            code, reval = "20200", "Error ["+clusterName+"] not existed"
        else:
            data = web.input()
            operation = data.operation
            status,local_IP = Utils.getLocal_IP()
            localIP =  local_IP.strip()
            cluster_id = cluster_id_info[0].id
            server_name_info = db.select('server_info',where='cluster_id=$cluster_id' ,what="name",vars=locals())
            if operation == "mount":
                for server in server_name_info:
                    serverName = server.name
                    commandWithArgs = "sh " + Globals.BACKEND_SCRIPT + "neofs_setup.sh " + serverName
                    status,message = Utils.executeOnServer(serverName,commandWithArgs)
                    if status != 0:
                        code, reval = "21015", "Error when operation[mount] cluster[" + clusterName + "]: mount failure on server[" + serverName + "]"
                        break
                if status == 0:
                    logger.info("Operation[mount] cluster[" + clusterName + "] successfully!")
                    return ''

            elif operation == "umount":
                for server in server_name_info:
                    serverName = server.name
                    commandWithArgs = "sh " + Globals.BACKEND_SCRIPT + "neofs_teardown.sh " + serverName
                    status,message = Utils.executeOnServer(serverName,commandWithArgs)
                    if status != 0:
                        code, reval = "21015", "Error when operation[umount] cluster[" + clusterName + "]: umount failure on server[" + serverName + "]"
                        break
                if status == 0:
                    logger.info("Operation[umount] cluster[" + clusterName + "] successfully!")
                    return ''

            elif operation == "remount":
                for server in server_name_info:
                    serverName = server.name
                    commandWithArgs = "sh " + Globals.BACKEND_SCRIPT + "neofs_teardown.sh " + serverName
                    status,message = Utils.executeOnServer(serverName,commandWithArgs)
                    if status != 0:
                        code, reval = "21015", "Error when operation[remount] cluster[" + clusterName + "]: umount failure on server[" + serverName + "]"
                        break
                    commandWithArgs = "sh " + Globals.BACKEND_SCRIPT + "neofs_setup.sh " + serverName
                    status,message = Utils.executeOnServer(serverName,commandWithArgs)
                    if status != 0:
                        code, reval = "21015", "Error when operation[remount] cluster[" + clusterName + "]: mount failure on server[" + serverName + "]"
                        break
                if status == 0:
                    logger.info("Operation[remount] cluster[" + clusterName + "] successfully!")
                    return ''

            else:
                code, reval = "21014", "Error when operation cluster[" + clusterName + "]: no such operation on cluster"
    except Exception, e:
        code, reval = "21015", "Error when operation a cluster:" + str(e)
Esempio n. 2
0
def getServersInfo(serverNameInfo,clusterName):
    sum = 0
    online = 0
    serversInfo = []
    servers = []
    sum = len(serverNameInfo)
    totalSpace = Decimal("0.0")
    usedSpace = Decimal("0.0")
    strs = str(clusterName) + "_servers"
    message = Globals.mc.get(strs)
    if message is not None:
        serversInfo = message
    else:
        for server in serverNameInfo:
            serverName = str(server.name)
            servers.append(serverName)
            if Utils.isOnline(serverName) == True:
                cmd = 'python ' + Globals.BACKEND_SCRIPT + 'get_server_bricks.py'
                status,message = Utils.executeOnServer(serverName, cmd)
                if status == 0:
                    if message.strip() != '[]':
                        message = message.replace("['",'')
                        message = message.replace("']",'')
                        info = message.split(':')
                        usedSpace =  usedSpace + Decimal(info[2])
                        totalSpace = totalSpace + Decimal(info[3])
            online = online + 1
        serversInfo.append(online)
        serversInfo.append(sum)
        serversInfo.append(usedSpace)
        serversInfo.append(totalSpace)
        serversInfo.append(servers)
    return serversInfo
Esempio n. 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)
Esempio n. 4
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)
Esempio n. 5
0
 def get_disk_info(self, reference):
     server_disk = reference.split(':')
     chkcmd = 'python '+ Globals.BACKEND_SCRIPT + '/get_format_device_status.py ' + server_disk[1]
     hostName = os.popen('hostname').read()
     if Utils.isLocalHost(server_disk[1].strip()):
         (status, output) = commands.getstatusoutput(chkcmd)
     else:
         (status, output) = Utils.executeOnServer(server_disk[0].strip(), chkcmd)
     return status,output
Esempio n. 6
0
def getDiskStatus(reference):
    server_disk = reference.split(":")
    chkcmd = "python " + Globals.BACKEND_SCRIPT + "get_format_device_status.py " + server_disk[1]

    if Utils.isLocalHost(server_disk[0].strip()):
        (status, output) = commands.getstatusoutput(chkcmd)
    else:
        (status, output) = Utils.executeOnServer(server_disk[0].strip(), chkcmd)
    return (status, output)
Esempio n. 7
0
def getVolumesInfo(clusterName):
    strs =  str(clusterName) + "_volumes"
    message = Globals.mc.get(strs)
    if message is not None:
        return message
    onlineNum = 0
    totalNum = 0
    volumes = []
    cluster_info = Globals.db.select('cluster_info',where='name=$clusterName',what='*',vars=locals())
    clusterid = cluster_info[0].id
    server_info = Globals.db.select('server_info', where='cluster_id=$clusterid',vars=locals())
    for server in server_info:
        if Utils.isOnline(str(server.name)) == False:
            continue
    status, message = Utils.executeOnServer(str(server.name), 'gluster volume list')
    if  message.strip() != 'No volumes present in cluster':
        volumeList = message.split('\n')
        if len(volumeList) != 0:
            onlineNum = 0
            totalNum = 0
            volumes = []
            for v in volumeList:
                if v.strip() != '':
                    cmd = "python " + Globals.BACKEND_SCRIPT + "get_volumes.py " + v
                    status,message = Utils.executeOnServer(str(server.name), cmd)
                    totalNum += 1
                    volumes.append(v)
                    if status == 0:
                        weblog = xml.etree.ElementTree.fromstring(message)
                        for entry in weblog.findall('status'):
                            status = entry.text
                        if status.strip().lower() == 'online':
                            onlineNum += 1
    clusterVolumeInfo = []
    clusterVolumeInfo.append(onlineNum)
    clusterVolumeInfo.append(totalNum)
    clusterVolumeInfo.append(volumes)
    return  clusterVolumeInfo
Esempio n. 8
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)
Esempio n. 9
0
def addBrick(clusterName, volumeName):
    try:
        data = web.input()
        serverName, code, reval = isPathExist(clusterName, volumeName, data)
        if code == 0:
            bricks = data.bricks
            bricks = bricks.replace(" ", ",")
            brickList = bricks.split(",")
            brickList = VolumeUtils.convertToIPAddr(brickList)
            bricks = ""
            for brick in brickList:
                bricks += brick + " "
            commandWithArgs = "gluster volume add-brick " + volumeName + " " + bricks
            status, message = Utils.executeOnServer(serverName, commandWithArgs)
            if status == 0:
                logger.info("Add bricks to volume[" + volumeName + "]")
                return ""
            else:
                code, reval = "23011", "Error when add a brick: " + message
    except Exception, e:
        code, reval = "23011", "Error when add a brick: " + str(e)
Esempio n. 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)
Esempio n. 11
0
def migrateBrick(clusterName, volumeName):
    autoCommit = False
    try:
        data = web.input()
        serverName, code, reval = isPathExist(clusterName, volumeName, data)
        if code == 0:
            source = data.source
            target = data.target
            server_dir = target.split(":")
            target = Utils.getIPByName(server_dir[0].strip()) + ":" + server_dir[1]
            commandWithArgs = "gluster volume replace-brick " + volumeName + " " + source + " " + target + " start"
            status, message = Utils.executeOnServer(serverName, commandWithArgs)
            if status != 0:
                code, reval = "23012", "Error when migrate a brick:" + message
            else:
                description = "Brick Migration on volume [" + volumeName + "] from [" + source + "] to [" + target + "]"
                reference = volumeName + "#" + source + "#" + target
                operation_id = 2
                db.insert(
                    "task_info",
                    description=description,
                    reference=reference,
                    operation_id=operation_id,
                    cluster_name=clusterName,
                )
                autoCommit_str = data.autoCommit
                if autoCommit_str is not None:
                    if autoCommit_str == "true":
                        autoCommit = True
                    else:
                        autoCommit = False
                        logger.info(description)
                        return ""
    except Exception, e:
        if str(e) == "'autoCommit'":
            return ""
        code, reval = "23012", "Error when migrate a brick:" + str(e)
Esempio n. 12
0
def isVolumeExist(serverName, volumeName):
    commandWithArgs = "gluster volume info " + volumeName
    status, message = Utils.executeOnServer(serverName, commandWithArgs)
    if status == 0:
        return True
    return False
Esempio n. 13
0
def removeBrick(clusterName, volumeName):
    try:
        data = web.input()
        serverName, code, reval = isPathExist(clusterName, volumeName, data)
        dataLen = len(data)
        if code == 0:
            if dataLen == 1:
                bricks = data.bricks
                bricks = bricks.replace(",", " ")
                commandWithArgs = (
                    "gluster --mode=script volume remove-brick " + volumeName + " " + bricks + " " + " force"
                )
                status, message = Utils.executeOnServer(serverName, commandWithArgs)
                if status != 0:
                    code, reval = "23013", "Error  where delete a brick" + message
                else:
                    return ""
            elif dataLen == 2:
                deleteData = data.deleteData
                bricksInfo = data.bricks
                bricks = bricksInfo.replace(",", " ")
                commandWithArgs = (
                    "gluster --mode=script volume remove-brick " + volumeName + " " + bricks + " " + " force"
                )
                status, message = Utils.executeOnServer(serverName, commandWithArgs)
                if status != 0:
                    code, reval = "23013", "Error  where delete a brick: " + message
                else:
                    if deleteData == "true":
                        bricks = bricksInfo.split(",")
                        for brick in bricks:
                            brickSplit = brick.split(":")
                            brickServer = brickSplit[0]
                            brickDir = brickSplit[1]
                            commandWithArgs = "rm -rf " + brickDir
                            status, message = Utils.executeOnServer(brickServer, commandWithArgs)
                            if status != 0:
                                code, reval = "23013", "Error where delete a brick: " + message
                                break
                        if status == 0:
                            return ""
                    else:
                        return ""
            elif dataLen == 3:
                deleteData = data.deleteData
                bricksInfo = data.bricks
                bricks = bricksInfo.replace(",", " ")
                commandWithArgs = (
                    "gluster --mode=script volume remove-brick " + volumeName + " " + bricks + " " + " force"
                )
                status, message = Utils.executeOnServer(serverName, commandWithArgs)
                if status != 0:
                    code, reval = "23013", "Error  where delete a brick: " + message
                else:
                    if deleteData == "true":
                        bricks = bricksInfo.split(",")
                        for brick in bricks:
                            brickSplit = brick.split(":")
                            brickServer = brickSplit[0]
                            brickDir = brickSplit[1]
                            commandWithArgs = "rm -rf " + brickDir
                            status, message = Utils.executeOnServer(brickServer, commandWithArgs)
                            if status != 0:
                                code, reval = "23013", "Error where delete a brick: " + message
                                break
                        if status == 0:
                            return ""
                    else:
                        return ""
            else:
                code, reval = "30002", "Input data is too long "
    except Exception, e:
        code, reval = "23013", "Error  where delete a brick: " + str(e)
Esempio n. 14
0
def initCluster(clusterName):
    try:
        images = ""
        vms = ""
        vars = ""
        params = []
        params.append(clusterName)
        cluster_id_info = db.select('cluster_info',where='name=$clusterName' ,what="id",vars=locals())
        if len(cluster_id_info) == 0:
            code, reval = "20200", "Error "+clusterName+" not existed"
            raise ClusterException(code,reval,params)
        data = web.input()
        dirs = data.dirs
        data_info = dirs.split(',')
        count = 0
        for dir in data_info:
            mkdir = dir.split(':')
            commandWithArgs = "mkdir -p " + mkdir[1]
            status,message = Utils.executeOnServer(mkdir[0],commandWithArgs)
            images = images + dir + "/neofs-images "
            vms = vms + dir + "/neofs-vms "
            vars = vars + dir + "/var-images "
            count = count + 1
        if count % 2 != 0:
            code, reval = "21006", "the number of dirs is must be a multiple of 2"
            raise ClusterException(code,reval,params)
        cluster_id = cluster_id_info[0].id
        servers = getOnlineServer(cluster_id)
        serverName = servers[0]
        commandWithArgs = "gluster volume --mode=script create neofs-images replica 2 " + images
        status,message = Utils.executeOnServer(serverName,commandWithArgs)
        if status != 0:
            code, reval = "21007", "Error when create volume [neofs-images]: "+message
            raise ClusterException(code,reval,params)
        db.insert('volume_info',name="neofs-images",cluster_id=cluster_id)
        commandWithArgs = "gluster volume --mode=script create neofs-vms replica 2 " + vms
        status,message = Utils.executeOnServer(serverName,commandWithArgs)
        if status != 0:
            code, reval = "21008", "Error when create volume [neofs-vms]: "+message
            raise ClusterException(code,reval,params)
        db.insert('volume_info',name="neofs-vms",cluster_id=cluster_id)
        commandWithArgs = "gluster volume --mode=script create var-images replica 2 " + vars
        status,message = Utils.executeOnServer(serverName,commandWithArgs)
        if status != 0:
            code, reval = "21009", "Error when create volume [var-images]: "+message
            raise ClusterException(code,reval,params)
        db.insert('volume_info',name="var-images",cluster_id=cluster_id)
        commandWithArgs = "gluster volume --mode=script start neofs-images "
        status,message = Utils.executeOnServer(serverName,commandWithArgs)
        if status != 0:
            code, reval = "21010", "Error when start volume [neofs-images]: "+message
            raise ClusterException(code,reval,params)
        commandWithArgs = "gluster volume --mode=script start neofs-vms "
        status,message = Utils.executeOnServer(serverName,commandWithArgs)
        if status != 0:
            code, reval = "21011", "Error when start volume [neofs-vms]: "+message
            raise ClusterException(code,reval,params)
        commandWithArgs = "gluster volume --mode=script start var-images "
        status,message = Utils.executeOnServer(serverName,commandWithArgs)
        if status != 0:
            code, reval = "21012", "Error when start volume [var-images]: "+message
            raise ClusterException(code,reval,params)
        server_name_info = db.select('server_info',where='cluster_id=$cluster_id' ,what="name",vars=locals())
        for server in server_name_info:
            serverName = server.name
            commandWithArgs = "sh " + Globals.BACKEND_SCRIPT + "neofs_setup.sh " + serverName
            status,message = Utils.executeOnServer(serverName,commandWithArgs)
        db.update('cluster_info', where="name = $clusterName", init = '1' ,vars=locals())
        logger.info("Init cluster[" + clusterName + "] successfully!")
        return ''
    except ClusterException,e:
        logger.error(e.reval)
        errorreturn (e.code,e.reval,e.params)
Esempio n. 15
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)
Esempio n. 16
0
         except:
             pass
         Globals.db.insert("server_info", name=serverName, cluster_id=clusterid)
         if status is not "0":
             web.HTTPError(status="400 Bad Request", data="")
             logger.error("Error when installing pubKey on server[" + serverName + "]: " + output)
             return Utils.errorCode(status, output, [])
     logger.info("Add the first server[" + serverName + "] to cluster[" + clusterName + "] successfully!")
     return ""
 status, output = Utils.installPubKey(serverName)
 if status is not "0":
     web.HTTPError(status="400 Bad Request", data="")
     logger.error("Error when installing pubKey on server[" + serverName + "]: " + output)
     return Utils.errorCode(status, output, [])
 server = server_info[0]
 status, output = Utils.executeOnServer(server.name, "gluster peer probe " + Utils.getIPByName(serverName))
 if status == -1:
     code, reval = (
         "26104",
         "error when connecting to remote host " + serverName + " from localhost " + server.name + "." + output,
     )
 elif status == -2:
     code, reval = "26059", "Error when using pub key to connect remote server " + serverName + "." + output
 elif status == 1:
     code, reval = (
         "22013",
         'Error when executing "gluster peer probe ' + Utils.getIPByName(serverName) + '"' + output,
     )
 if code is not None:
     params = []
     params.append(clusterName)