Beispiel #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)
Beispiel #2
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)