Exemplo n.º 1
0
def delete(name, del_lbs):
    """ 删除 lb.

    要删除的 lb 应该先下线, 这里只在数据库中删除.

    """
    # 检查是否重复.
    if len(del_lbs) != len(set(del_lbs)):
        logger.error("Lb duplicates")
        return False

    # 检查 lb 是否存在.
    checkdict = {"name": name, "lbs": del_lbs}
    if not funcs.check(checkdict, check_exist=True):
        logger.error("Cluster or some lbs not exist")
        return False

    # 获取集群信息.
    key = "cluster:%s" % name
    old_lbinfos = eval(client.hget(key, "lbinfos"))

    # 删除 lb.
    lbinfos = copy.deepcopy(old_lbinfos)
    for i in lbinfos:
        for j in del_lbs:
            if i["hostname"] == j:
                lbinfos.remove(i)
    client.hset(key, "lbinfos", lbinfos)

    logger.info("Lbs deleted:%s" % ",".join(del_lbs))
    return True
Exemplo n.º 2
0
def delete(name, del_vips):
    """ 删除 vip.

    """
    # 检查是否重复.
    if len(del_vips) != len(set(del_vips)):
        logger.error("Vip duplicates")
        return False

    # 检查是否存在.
    checkdict = {"name": name, "vips": del_vips}
    if not funcs.check(checkdict, check_exist=True):
        logger.error("Cluster or some vips not exist")
        return False

    # 获取集群信息.
    key = "cluster:%s" % name
    old_vip2ws = eval(client.hget(key, "vip2ws"))

    # 获取新的 vip2ws.
    vip2ws = copy.deepcopy(old_vip2ws)
    for i in vip2ws:
        for j in del_vips:
            if i["vip"] == j:
                vip2ws.remove(i)

    # 保存集群信息.
    client.hset(key, "vip2ws", vip2ws)

    logger.info("Vips deleted:%s" % ",".join(del_vips))
    return True
Exemplo n.º 3
0
def modify(name, vip, wstype):
    """ 修改一个集群的一个 vip 的 wstype.

    """
    # 检查集群是否存在.
    check_dict = {"name": name}
    if not funcs.check(check_dict, check_exist=True):
        logger.error("No cluster:%s" % name)
        return False

    # 获取集群信息.
    key = "cluster:%s" % name
    old_vip2ws = eval(client.hget(key, "vip2ws"))

    # 检查 vip 是否存在.
    vips = [i["vip"] for i in old_vip2ws]
    if vip not in vips:
        logger.error("No vip:%s" % vip)
        return False

    # 修改 wstype.
    vip2ws = list()
    for i in old_vip2ws:
        if i["vip"] == vip:
            i["wstype"] = wstype
            vip2ws.append(i)
        else:
            vip2ws.append(i)

    # 保存集群信息.
    client.hset(key, "vip2ws", vip2ws)

    logger.info("Wstype modified:%s, %s" % (vip, wstype))
    return True
Exemplo n.º 4
0
def delete(name, del_lbs):
    """ 删除 lb.

    要删除的 lb 应该先下线, 这里只在数据库中删除.

    """
    # 检查是否重复.
    if len(del_lbs) != len(set(del_lbs)):
        logger.error("Lb duplicates")
        return False

    # 检查 lb 是否存在.
    checkdict = {
        "name": name,
        "lbs": del_lbs
    }
    if not funcs.check(checkdict, check_exist=True):
        logger.error("Cluster or some lbs not exist")
        return False

    # 获取集群信息.
    key = "cluster:%s" % name
    old_lbinfos = eval(client.hget(key, "lbinfos"))

    # 删除 lb.
    lbinfos = copy.deepcopy(old_lbinfos)
    for i in lbinfos:
        for j in del_lbs:
            if i["hostname"] == j:
                lbinfos.remove(i)
    client.hset(key, "lbinfos", lbinfos)

    logger.info("Lbs deleted:%s" % ",".join(del_lbs))
    return True
Exemplo n.º 5
0
def delete(name, del_vips):
    """ 删除 vip.

    """
    # 检查是否重复.
    if len(del_vips) != len(set(del_vips)):
        logger.error("Vip duplicates")
        return False

    # 检查是否存在.
    checkdict = {
        "name": name,
        "vips": del_vips
    }
    if not funcs.check(checkdict, check_exist=True):
        logger.error("Cluster or some vips not exist")
        return False

    # 获取集群信息.
    key = "cluster:%s" % name
    old_vip2ws = eval(client.hget(key, "vip2ws"))

    # 获取新的 vip2ws.
    vip2ws = copy.deepcopy(old_vip2ws)
    for i in vip2ws:
        for j in del_vips:
            if i["vip"] == j:
                vip2ws.remove(i)

    # 保存集群信息.
    client.hset(key, "vip2ws", vip2ws)

    logger.info("Vips deleted:%s" % ",".join(del_vips))
    return True
Exemplo n.º 6
0
def modify(name, vip, sport, port):
    """ 修改一个集群的一个 vip 的一个 port.

    sport 指明是哪个端口;
    port 是一个 dict, 格式如下:
    {
        dport: aaa,
        synproxy: 0,
        sport: bbb,
        persistence_timeout: 50
    }
    dict 中的 sport 可以不指定, 如果指定会修改成指定值;
    另外三个字段可以随意指定, 不指定的话不修改.

    """
    # 检查集群是否存在.
    check_dict = {
        "name": name,
    }
    if not funcs.check(check_dict, check_exist=True):
        logger.error("No cluster:%s" % name)
        return False    

    # 获取集群信息.
    key = "cluster:%s" % name
    old_vip2ws = eval(client.hget(key, "vip2ws"))

    # 检查 vip 是否存在.
    vips = [i["vip"] for i in old_vip2ws]
    if vip not in vips:
        logger.error("No vip:%s" % vip)
        return False

    # 增加 ports.
    vip2ws = list()
    for i in old_vip2ws:
        if i["vip"] == vip:
            for j in i["ports"]:
                if j["sport"] == sport:
                    _tmp = copy.deepcopy(j)
                    for _key in port:
                        _tmp[_key] = port[_key]
                    i["ports"].remove(j)
                    i["ports"].append(_tmp)
            vip2ws.append(i)
        else:
            vip2ws.append(i)

    # 保存集群信息.
    client.hset(key, "vip2ws", vip2ws)

    logger.info("Ports modified:%s, %s, %s" % (vip, sport, port))
    return True
Exemplo n.º 7
0
def modify(name, vip, sport, port):
    """ 修改一个集群的一个 vip 的一个 port.

    sport 指明是哪个端口;
    port 是一个 dict, 格式如下:
    {
        dport: aaa,
        synproxy: 0,
        sport: bbb,
        persistence_timeout: 50
    }
    dict 中的 sport 可以不指定, 如果指定会修改成指定值;
    另外三个字段可以随意指定, 不指定的话不修改.

    """
    # 检查集群是否存在.
    check_dict = {
        "name": name,
    }
    if not funcs.check(check_dict, check_exist=True):
        logger.error("No cluster:%s" % name)
        return False

    # 获取集群信息.
    key = "cluster:%s" % name
    old_vip2ws = eval(client.hget(key, "vip2ws"))

    # 检查 vip 是否存在.
    vips = [i["vip"] for i in old_vip2ws]
    if vip not in vips:
        logger.error("No vip:%s" % vip)
        return False

    # 增加 ports.
    vip2ws = list()
    for i in old_vip2ws:
        if i["vip"] == vip:
            for j in i["ports"]:
                if j["sport"] == sport:
                    _tmp = copy.deepcopy(j)
                    for _key in port:
                        _tmp[_key] = port[_key]
                    i["ports"].remove(j)
                    i["ports"].append(_tmp)
            vip2ws.append(i)
        else:
            vip2ws.append(i)

    # 保存集群信息.
    client.hset(key, "vip2ws", vip2ws)

    logger.info("Ports modified:%s, %s, %s" % (vip, sport, port))
    return True
Exemplo n.º 8
0
def add(name, new_vip2ws):
    """ 增加 VIP.

    """
    # 检查集群是否存在.
    checkdict = {
        "name": name,
    }
    if not funcs.check(checkdict, check_exist=True):
        logger.error("No cluster:%s" % name)
        return False

    # 获取新增 vip.
    new_vips = [i["vip"] for i in new_vip2ws]
    if len(new_vips) != len(set(new_vips)):
        logger.error("Vip duplicates")
        return False

    # 检查新增 vip 是否存在.
    checkdict = {
        "vips": new_vips,
    }
    if not funcs.check(checkdict, check_exist=False):
        logger.error("Some vips exist")
        return False

    # 获取集群信息.
    key = "cluster:%s" % name
    old_vip2ws = eval(client.hget(key, "vip2ws"))

    # 获取新的 vip2ws.
    vip2ws = copy.deepcopy(old_vip2ws)
    vip2ws.extend(new_vip2ws)
    del old_vip2ws

    # 保存集群信息.
    client.hset(key, "vip2ws", vip2ws)

    logger.info("Vips added:%s" % new_vip2ws)
    return True
Exemplo n.º 9
0
def add(name, new_vip2ws):
    """ 增加 VIP.

    """
    # 检查集群是否存在.
    checkdict = {
        "name": name,
    }
    if not funcs.check(checkdict, check_exist=True):
        logger.error("No cluster:%s" % name)
        return False

    # 获取新增 vip.
    new_vips = [i["vip"] for i in new_vip2ws]
    if len(new_vips) != len(set(new_vips)):
        logger.error("Vip duplicates")
        return False

    # 检查新增 vip 是否存在.
    checkdict = {
        "vips": new_vips,
    }
    if not funcs.check(checkdict, check_exist=False):
        logger.error("Some vips exist")
        return False

    # 获取集群信息.
    key = "cluster:%s" % name
    old_vip2ws = eval(client.hget(key, "vip2ws"))

    # 获取新的 vip2ws.
    vip2ws = copy.deepcopy(old_vip2ws)
    vip2ws.extend(new_vip2ws)
    del old_vip2ws

    # 保存集群信息.
    client.hset(key, "vip2ws", vip2ws)

    logger.info("Vips added:%s" % new_vip2ws)
    return True
Exemplo n.º 10
0
def add(name, new_vip2ws):
    """ 增加 Ws.

    由于 ws 属于 vip,  所以需要传入 vip, 而且 vip 都要存在.

    new_vip2ws 只需要含有 vip 和 wss 两个 key 即可.

    """
    # 获取 vip.
    share_vips = [i["vip"] for i in new_vip2ws]
    if len(share_vips) != len(set(share_vips)):
        logger.error("Vip duplicates")
        return False

    # 检查是否 vip 是否存在.
    checkdict = {
        "name": name,
        "vips": share_vips
    }
    if not funcs.check(checkdict, check_exist=True):
        logger.error("Cluster or some vips not exist")
        return False

    # 获取集群信息.
    key = "cluster:%s" % name
    old_vip2ws = eval(client.hget(key, "vip2ws"))

    # 检查 vip 是否在集群中.
    vips = [i["vip"] for i in old_vip2ws]
    if True in map(lambda x:x not in vips, share_vips):
        logger.error("Some vips not exist")
        return False

    # 生成新的 vip2ws.
    vip2ws = list()
    for i in old_vip2ws:
        if i["vip"] in share_vips:
            for j in new_vip2ws:
                if i["vip"] == j["vip"]:
                    tmp = copy.deepcopy(i["wss"])
                    map(lambda x:tmp.append(x), j["wss"])
                    i["wss"] = list(set(tmp))
                    vip2ws.append(i)
        else:
            vip2ws.append(i)

    # 保存集群信息.
    client.hset(key, "vip2ws", vip2ws)

    logger.info("Wss added:%s" % new_vip2ws)
    return True
Exemplo n.º 11
0
def add(name, new_vip2ws):
    """ 增加 Ws.

    由于 ws 属于 vip,  所以需要传入 vip, 而且 vip 都要存在.

    new_vip2ws 只需要含有 vip 和 wss 两个 key 即可.

    """
    # 获取 vip.
    share_vips = [i["vip"] for i in new_vip2ws]
    if len(share_vips) != len(set(share_vips)):
        logger.error("Vip duplicates")
        return False

    # 检查是否 vip 是否存在.
    checkdict = {"name": name, "vips": share_vips}
    if not funcs.check(checkdict, check_exist=True):
        logger.error("Cluster or some vips not exist")
        return False

    # 获取集群信息.
    key = "cluster:%s" % name
    old_vip2ws = eval(client.hget(key, "vip2ws"))

    # 检查 vip 是否在集群中.
    vips = [i["vip"] for i in old_vip2ws]
    if True in map(lambda x: x not in vips, share_vips):
        logger.error("Some vips not exist")
        return False

    # 生成新的 vip2ws.
    vip2ws = list()
    for i in old_vip2ws:
        if i["vip"] in share_vips:
            for j in new_vip2ws:
                if i["vip"] == j["vip"]:
                    tmp = copy.deepcopy(i["wss"])
                    map(lambda x: tmp.append(x), j["wss"])
                    i["wss"] = list(set(tmp))
                    vip2ws.append(i)
        else:
            vip2ws.append(i)

    # 保存集群信息.
    client.hset(key, "vip2ws", vip2ws)

    logger.info("Wss added:%s" % new_vip2ws)
    return True
Exemplo n.º 12
0
def delete(name, del_vip2ws):
    """ 删除 ws.

    由于 ws 属于 vip,  所以需要传入 vip, 而且 vip 都要存在.

    new_vip2ws 只需要含有 vip 和 wss 两个 key 即可.

    """
    # 获取 vip.
    share_vips = [i["vip"] for i in del_vip2ws]
    if len(share_vips) != len(set(share_vips)):
        logger.error("Vip duplicates")
        return False

    # 检查是否 vip 是否存在.
    checkdict = {
        "name": name,
        "vips": share_vips
    }
    if not funcs.check(checkdict, check_exist=True):
        logger.error("Cluster or some vips not exist")
        return False

    # 获取集群信息.
    key = "cluster:%s" % name
    old_vip2ws = eval(client.hget(key, "vip2ws"))

    # 获取新的 vip2ws.
    vip2ws = list()
    for i in old_vip2ws:
        if i["vip"] in share_vips:
            old_wss = copy.deepcopy(i["wss"])

            for j in del_vip2ws:
                if i["vip"] == j["vip"]:
                    break
            del_wss = copy.deepcopy(j["wss"])

            i["wss"] = list(set(old_wss) - set(del_wss))
            vip2ws.append(i)
        else:
            vip2ws.append(i)

    # 保存集群信息.
    client.hset(key, "vip2ws", vip2ws)

    logger.info("Wss deleted:%s" % del_vip2ws)
    return True
Exemplo n.º 13
0
def delete(name, del_vip2ws):
    """ 删除 ws.

    由于 ws 属于 vip,  所以需要传入 vip, 而且 vip 都要存在.

    new_vip2ws 只需要含有 vip 和 wss 两个 key 即可.

    """
    # 获取 vip.
    share_vips = [i["vip"] for i in del_vip2ws]
    if len(share_vips) != len(set(share_vips)):
        logger.error("Vip duplicates")
        return False

    # 检查是否 vip 是否存在.
    checkdict = {"name": name, "vips": share_vips}
    if not funcs.check(checkdict, check_exist=True):
        logger.error("Cluster or some vips not exist")
        return False

    # 获取集群信息.
    key = "cluster:%s" % name
    old_vip2ws = eval(client.hget(key, "vip2ws"))

    # 获取新的 vip2ws.
    vip2ws = list()
    for i in old_vip2ws:
        if i["vip"] in share_vips:
            old_wss = copy.deepcopy(i["wss"])

            for j in del_vip2ws:
                if i["vip"] == j["vip"]:
                    break
            del_wss = copy.deepcopy(j["wss"])

            i["wss"] = list(set(old_wss) - set(del_wss))
            vip2ws.append(i)
        else:
            vip2ws.append(i)

    # 保存集群信息.
    client.hset(key, "vip2ws", vip2ws)

    logger.info("Wss deleted:%s" % del_vip2ws)
    return True
Exemplo n.º 14
0
def delete(name):
    """ 删除一个集群.

    删除集群需要在集群完全不用之后, 只删除数据库信息.

    """
    # 检查集群是否存在.
    check_dict = {
        "name": name,
    }
    if not funcs.check(check_dict, check_exist=True):
        logger.error("No cluster:%s" % name)
        return False

    key = "cluster:%s" % name
    client.delete(key)

    logger.info("Cluster deleted:%s" % name)
    return True
Exemplo n.º 15
0
def delete(name):
    """ 删除一个集群.

    删除集群需要在集群完全不用之后, 只删除数据库信息.

    """
    # 检查集群是否存在.
    check_dict = {
        "name": name,
    }
    if not funcs.check(check_dict, check_exist=True):
        logger.error("No cluster:%s" % name)
        return False

    key = "cluster:%s" % name
    client.delete(key)

    logger.info("Cluster deleted:%s" % name)
    return True
Exemplo n.º 16
0
def delete(name, vip, sports):
    """ 删除一个集群的一个 vip 的若干个端口.

    sports 是一个 list, 格式如下:
    [80, 443, ...]

    """
    # 检查集群是否存在.
    check_dict = {
        "name": name,
    }
    if not funcs.check(check_dict, check_exist=True):
        logger.error("No cluster:%s" % name)
        return False

    # 获取集群信息.
    key = "cluster:%s" % name
    old_vip2ws = eval(client.hget(key, "vip2ws"))

    # 检查 vip 是否存在.
    vips = [i["vip"] for i in old_vip2ws]
    if vip not in vips:
        logger.error("No vip:%s" % vip)
        return False

    # 增加 ports.
    vip2ws = list()
    for i in old_vip2ws:
        if i["vip"] == vip:
            for j in i["ports"]:
                if j["sport"] in sports:
                    i["ports"].remove(j)
            vip2ws.append(i)
        else:
            vip2ws.append(i)

    # 保存集群信息.
    client.hset(key, "vip2ws", vip2ws)

    logger.info("Ports deleted:%s, %s" % (vip, sports))
    return True
Exemplo n.º 17
0
def delete(name, vip, sports):
    """ 删除一个集群的一个 vip 的若干个端口.

    sports 是一个 list, 格式如下:
    [80, 443, ...]

    """
    # 检查集群是否存在.
    check_dict = {
        "name": name,
    }
    if not funcs.check(check_dict, check_exist=True):
        logger.error("No cluster:%s" % name)
        return False    

    # 获取集群信息.
    key = "cluster:%s" % name
    old_vip2ws = eval(client.hget(key, "vip2ws"))

    # 检查 vip 是否存在.
    vips = [i["vip"] for i in old_vip2ws]
    if vip not in vips:
        logger.error("No vip:%s" % vip)
        return False

    # 增加 ports.
    vip2ws = list()
    for i in old_vip2ws:
        if i["vip"] == vip:
            for j in i["ports"]:
                if j["sport"] in sports:
                    i["ports"].remove(j)
            vip2ws.append(i)
        else:
            vip2ws.append(i)

    # 保存集群信息.
    client.hset(key, "vip2ws", vip2ws)

    logger.info("Ports deleted:%s, %s" % (vip, sports))
    return True
Exemplo n.º 18
0
def modify(name, vip, wstype):
    """ 修改一个集群的一个 vip 的 wstype.

    """
    # 检查集群是否存在.
    check_dict = {
        "name": name,
    }
    if not funcs.check(check_dict, check_exist=True):
        logger.error("No cluster:%s" % name)
        return False

    # 获取集群信息.
    key = "cluster:%s" % name
    old_vip2ws = eval(client.hget(key, "vip2ws"))

    # 检查 vip 是否存在.
    vips = [i["vip"] for i in old_vip2ws]
    if vip not in vips:
        logger.error("No vip:%s" % vip)
        return False

    # 修改 wstype.
    vip2ws = list()
    for i in old_vip2ws:
        if i["vip"] == vip:
            i["wstype"] = wstype
            vip2ws.append(i)
        else:
            vip2ws.append(i)

    # 保存集群信息.
    client.hset(key, "vip2ws", vip2ws)

    logger.info("Wstype modified:%s, %s" % (vip, wstype))
    return True
Exemplo n.º 19
0
def add(name, vip, ports):
    """ 对一个集群的一个 vip 增加若干个 port.

    ports 是一个 list, 格式如下:
    [
        {
            dport: xxx,
            synproxy: 1,
            sport: yyy,
            persistence_timeout: 50
        },
        {
            dport: aaa,
            synproxy: 0,
            sport: bbb,
            persistence_timeout: 50
        },
        ...    
    ]

    事实上如何鉴别多个 port 是否重复呢, 答案是根据 sport.

    """
    # 检查集群是否存在.
    check_dict = {
        "name": name,
    }
    if not funcs.check(check_dict, check_exist=True):
        logger.error("No cluster:%s" % name)
        return False    

    # 获取集群信息.
    key = "cluster:%s" % name
    old_vip2ws = eval(client.hget(key, "vip2ws"))

    # 检查 vip 是否存在.
    vips = [i["vip"] for i in old_vip2ws]
    if vip not in vips:
        logger.error("No vip:%s" % vip)
        return False

    # 增加 ports.
    vip2ws = list()
    for i in old_vip2ws:
        if i["vip"] == vip:
            old_sports = [x["sport"] for x in i["ports"]]
            new_sports = [x["sport"] for x in ports]
            if True in map(lambda x:x in old_sports, new_sports):
                logger.error("Sport duplicates:%s" % new_sports)
                return False

            i["ports"].extend(ports)
            vip2ws.append(i)
        else:
            vip2ws.append(i)

    # 保存集群信息.
    client.hset(key, "vip2ws", vip2ws)

    logger.info("Ports added:%s, %s" % (vip, ports))
    return True
Exemplo n.º 20
0
def add(name, vip, ports):
    """ 对一个集群的一个 vip 增加若干个 port.

    ports 是一个 list, 格式如下:
    [
        {
            dport: xxx,
            synproxy: 1,
            sport: yyy,
            persistence_timeout: 50
        },
        {
            dport: aaa,
            synproxy: 0,
            sport: bbb,
            persistence_timeout: 50
        },
        ...    
    ]

    事实上如何鉴别多个 port 是否重复呢, 答案是根据 sport.

    """
    # 检查集群是否存在.
    check_dict = {
        "name": name,
    }
    if not funcs.check(check_dict, check_exist=True):
        logger.error("No cluster:%s" % name)
        return False

    # 获取集群信息.
    key = "cluster:%s" % name
    old_vip2ws = eval(client.hget(key, "vip2ws"))

    # 检查 vip 是否存在.
    vips = [i["vip"] for i in old_vip2ws]
    if vip not in vips:
        logger.error("No vip:%s" % vip)
        return False

    # 增加 ports.
    vip2ws = list()
    for i in old_vip2ws:
        if i["vip"] == vip:
            old_sports = [x["sport"] for x in i["ports"]]
            new_sports = [x["sport"] for x in ports]
            if True in map(lambda x: x in old_sports, new_sports):
                logger.error("Sport duplicates:%s" % new_sports)
                return False

            i["ports"].extend(ports)
            vip2ws.append(i)
        else:
            vip2ws.append(i)

    # 保存集群信息.
    client.hset(key, "vip2ws", vip2ws)

    logger.info("Ports added:%s, %s" % (vip, ports))
    return True
Exemplo n.º 21
0
def add(name, new_lbinfos):
    """ 增加 lb.

    """
    # 检查集群是否存在.
    checkdict = {
        "name": name,
    }
    if not funcs.check(checkdict, check_exist=True):
        logger.error("No cluster:%s" % name)
        return False

    # 获取新增 lb.
    new_lbs = [i["hostname"] for i in new_lbinfos]
    if len(new_lbs) != len(set(new_lbs)):
        logger.error("Lb duplicates")
        return False

    # 检查新增 lb 是否已经存在.
    checkdict = {
        "lbs": new_lbs
    }
    if not funcs.check(checkdict, check_exist=False):
        logger.error("Some lbs exist")
        return False

    # 对所有 lb 安装 lvs fullnat.
    ret = funcs.lb_multi(new_lbs)
    fails = [ i for i in ret if not i["result"]]
    if fails != []:
        message = "Some lbs install failed:%s" % \
            ",".join(fails)
        logger.error(message)
        return False
    message = "All lbs install success:%s" % \
        ",".join(new_lbs)
    logger.info(message)

    # 获取已有集群信息.
    key = "cluster:%s" % name
    _type = client.hget(key, "type")
    old_lbinfos = eval(client.hget(key, "lbinfos"))
    device = client.hget(key, "device")

    # 获取新的 lbinfos.
    lbinfos = copy.deepcopy(old_lbinfos)
    lbinfos.extend(new_lbinfos)
    del old_lbinfos

    # 配置 lb.
    for lbinfo in new_lbinfos:
        lb = lbinfo["hostname"]
        internalip = lbinfo["internalip"]
        internalnetmask = lbinfo["internalnetmask"]
        internalgateway = lbinfo["internalgateway"]

        # 如果 _type 是 extra, 需要公网 IP;
        # 如果 _type 是 internal, 不需要公网 IP.
        extraip = lbinfo.get("extraip", None)
        extranetmask = lbinfo.get("extranetmask", None)
        extragateway = lbinfo.get("extragateway", None)

        # 配置 IP.
        ret = funcs.ip(lb, _type, device, internalip, 
                       internalnetmask, internalgateway, extraip, 
                       extranetmask, extragateway)
        if not ret:
            return False

        # 配置 lip.
        _lips = lips.get(internalip, internalnetmask)
        ret = funcs.lips(lb, internalip, _lips)
        if not ret:
            logger.error("Cfg lb lips failed:%s" % lb)
            return False
        logger.info("Cfg lb lips success:%s" % lb)

    # 保存集群信息.
    client.hset(key, "lbinfos", lbinfos)
    
    logger.info("Lbs added:%s" % ",".join(new_lbs)) 
    return True
Exemplo n.º 22
0
def add(name, _type, lbinfos, vip2ws, vipnets, device):
    """ 增加一个 cluster.

    """
    # 拿到 lb 信息.
    lbs = [i["hostname"] for i in lbinfos]
    if len(lbs) != len(set(lbs)):
        logger.error("Lb duplicates")
        return False

    # 拿到 vip 信息.
    vips = [i["vip"] for i in vip2ws]
    if len(vips) != len(set(vips)):
        logger.error("Vip duplicates")
        return False

    # 检查 name, lb 和 vip 是否不存在.
    check_dict = {
        "name": name,
        "lbs": lbs,
        "vips": vips,
    }
    if not funcs.check(check_dict, check_exist=False):
        logger.error("Cluster or lbs or vips has exists.")
        return False

    # 对所有 lb 安装 lvs fullnat.
    ret = funcs.lb_multi(lbs)
    fails = [i for i in ret if not i["result"]]
    if fails != []:
        message = "Some lbs install failed:%s" % \
            ",".join(fails)
        logger.error(message)
        return False
    else:
        message = "All lbs install success:%s" % \
            ",".join(lbs)
        logger.info(message)

    # 配置 lb.
    for lbinfo in lbinfos:
        lb = lbinfo["hostname"]
        internalip = lbinfo["internalip"]
        internalnetmask = lbinfo["internalnetmask"]
        internalgateway = lbinfo["internalgateway"]

        # 如果 _type 是 extra, 需要公网 IP;
        # 如果 _type 是 internal, 不需要公网 IP.
        extraip = lbinfo.get("extraip", None)
        extranetmask = lbinfo.get("extranetmask", None)
        extragateway = lbinfo.get("extragateway", None)

        # 配置 IP.
        ret = funcs.ip(lb, _type, device, internalip, internalnetmask,
                       internalgateway, extraip, extranetmask, extragateway)
        if not ret:
            return False

        # 配置 lip.
        _lips = lips.get(internalip, internalnetmask)
        ret = funcs.lips(lb, internalip, _lips)
        if not ret:
            logger.error("Cfg lb lips failed:%s" % lb)
            return False
        logger.info("Cfg lb lips success:%s" % lb)

    # 保存集群信息.
    key = "cluster:%s" % name
    client.hset(key, "type", _type)
    client.hset(key, "lbinfos", lbinfos)
    client.hset(key, "vip2ws", vip2ws)
    client.hset(key, "vipnets", vipnets)
    client.hset(key, "device", device)

    logger.info("Cluster added:%s" % name)
    return True
Exemplo n.º 23
0
def add(name, _type, lbinfos, vip2ws, vipnets, device):
    """ 增加一个 cluster.

    """
    # 拿到 lb 信息.
    lbs = [i["hostname"] for i in lbinfos]
    if len(lbs) != len(set(lbs)):
        logger.error("Lb duplicates")
        return False

    # 拿到 vip 信息.
    vips = [i["vip"] for i in vip2ws]
    if len(vips) != len(set(vips)):
        logger.error("Vip duplicates")
        return False

    # 检查 name, lb 和 vip 是否不存在.
    check_dict = {
        "name": name,
        "lbs": lbs,
        "vips": vips,
    }
    if not funcs.check(check_dict, check_exist=False):
        logger.error("Cluster or lbs or vips has exists.")
        return False

    # 对所有 lb 安装 lvs fullnat.
    ret = funcs.lb_multi(lbs)
    fails = [ i for i in ret if not i["result"]]
    if fails != []:
        message = "Some lbs install failed:%s" % \
            ",".join(fails)
        logger.error(message)
        return False
    else:
        message = "All lbs install success:%s" % \
            ",".join(lbs)
        logger.info(message)

    # 配置 lb.
    for lbinfo in lbinfos:
        lb = lbinfo["hostname"]
        internalip = lbinfo["internalip"]
        internalnetmask = lbinfo["internalnetmask"]
        internalgateway = lbinfo["internalgateway"]

        # 如果 _type 是 extra, 需要公网 IP;
        # 如果 _type 是 internal, 不需要公网 IP.
        extraip = lbinfo.get("extraip", None)
        extranetmask = lbinfo.get("extranetmask", None)
        extragateway = lbinfo.get("extragateway", None)

        # 配置 IP.
        ret = funcs.ip(lb, _type, device, internalip, 
                       internalnetmask, internalgateway, extraip, 
                       extranetmask, extragateway)
        if not ret:
            return False

        # 配置 lip.
        _lips = lips.get(internalip, internalnetmask)
        ret = funcs.lips(lb, internalip, _lips)
        if not ret:
            logger.error("Cfg lb lips failed:%s" % lb)
            return False
        logger.info("Cfg lb lips success:%s" % lb)

    # 保存集群信息.
    key = "cluster:%s" % name
    client.hset(key, "type", _type)
    client.hset(key, "lbinfos", lbinfos)
    client.hset(key, "vip2ws", vip2ws)
    client.hset(key, "vipnets", vipnets)
    client.hset(key, "device", device)

    logger.info("Cluster added:%s" % name)        
    return True
Exemplo n.º 24
0
def add(name, new_lbinfos):
    """ 增加 lb.

    """
    # 检查集群是否存在.
    checkdict = {
        "name": name,
    }
    if not funcs.check(checkdict, check_exist=True):
        logger.error("No cluster:%s" % name)
        return False

    # 获取新增 lb.
    new_lbs = [i["hostname"] for i in new_lbinfos]
    if len(new_lbs) != len(set(new_lbs)):
        logger.error("Lb duplicates")
        return False

    # 检查新增 lb 是否已经存在.
    checkdict = {"lbs": new_lbs}
    if not funcs.check(checkdict, check_exist=False):
        logger.error("Some lbs exist")
        return False

    # 对所有 lb 安装 lvs fullnat.
    ret = funcs.lb_multi(new_lbs)
    fails = [i for i in ret if not i["result"]]
    if fails != []:
        message = "Some lbs install failed:%s" % \
            ",".join(fails)
        logger.error(message)
        return False
    message = "All lbs install success:%s" % \
        ",".join(new_lbs)
    logger.info(message)

    # 获取已有集群信息.
    key = "cluster:%s" % name
    _type = client.hget(key, "type")
    old_lbinfos = eval(client.hget(key, "lbinfos"))
    device = client.hget(key, "device")

    # 获取新的 lbinfos.
    lbinfos = copy.deepcopy(old_lbinfos)
    lbinfos.extend(new_lbinfos)
    del old_lbinfos

    # 配置 lb.
    for lbinfo in new_lbinfos:
        lb = lbinfo["hostname"]
        internalip = lbinfo["internalip"]
        internalnetmask = lbinfo["internalnetmask"]
        internalgateway = lbinfo["internalgateway"]

        # 如果 _type 是 extra, 需要公网 IP;
        # 如果 _type 是 internal, 不需要公网 IP.
        extraip = lbinfo.get("extraip", None)
        extranetmask = lbinfo.get("extranetmask", None)
        extragateway = lbinfo.get("extragateway", None)

        # 配置 IP.
        ret = funcs.ip(lb, _type, device, internalip, internalnetmask,
                       internalgateway, extraip, extranetmask, extragateway)
        if not ret:
            return False

        # 配置 lip.
        _lips = lips.get(internalip, internalnetmask)
        ret = funcs.lips(lb, internalip, _lips)
        if not ret:
            logger.error("Cfg lb lips failed:%s" % lb)
            return False
        logger.info("Cfg lb lips success:%s" % lb)

    # 保存集群信息.
    client.hset(key, "lbinfos", lbinfos)

    logger.info("Lbs added:%s" % ",".join(new_lbs))
    return True