Exemple #1
0
def _lb_single(host):
    """ 安装单台 lb.

    """    
    # 执行安装 fullnat 的命令.
    rc, so, se = utils.remote_cmd(host, LVS_FULLNAT_CMD)

    # 安装 lvs fullnat 完成后会重启系统, 当 ping 不通时,
    # 说明已经重启系统.
    checkcmd = "! ping -c 3 %s &>/dev/null" % host
    ret = utils.check_wait_null(checkcmd, timeinit=0, 
                                interval=5, timeout=2700)
    if not ret:
        return False

    # 当 ping 通时, 说明已经重启完毕.
    checkcmd = "ping -c 3 %s &>/dev/null" % host
    ret = utils.check_wait_null(checkcmd, timeinit=0, 
                                interval=5, timeout=1200)

    return {"host": host, "result": ret}
Exemple #2
0
def lips(lb, ip, lips):
    """ 配置 lb 的 lips.

    """
    # 因为改了 DNS, 先清空本地 known_hosts 文件.
    cmd = "cat /dev/null >%s" % LOCAL_SSH_KNOWN_HOSTS
    rc, so, se = utils.shell(cmd)
    if rc != 0:
        message = "clean %s failed." % LOCAL_SSH_KNOWN_HOSTS
        logger.error(message)
        return False

    message = "Waiting for network administor to change "\
                "network conf for %s" % lb
    logger.info(message)

    # 发邮件让网络工程师修改 lb 的网络配置.
    subject = u"[接入集群]请在一小时之内修改%s的网络设置, 否则集群会建立失败" % lb
    context = ""
    mail.mail(None, subject, context)

    # 检查是否能够 ping 通.
    time.sleep(120)
    checkcmd = "ping -c 3 %s &>/dev/null" % ip
    ret = utils.check_wait_null(checkcmd, timeinit=0, 
                                interval=5, timeout=3600)
    if not ret:
        logger.error("Ping failed, lb:%s, ip:%s" % (lb, ip))
        return False

    # 配置 lip.
    cmd = "sudo -i wdconfig lvsfullnat_lip"
    rc, so, se = utils.remote_cmd(ip, cmd)
    if rc != 0:
        message = "Cfg lips failed, lb:%s, error:%s" % (lb, se)
        logger.error(message)
        return False

    cmd = "cd /tmp/post_config/lvsfullnat_lip_config && "\
            "sudo sh lvsfullnat_lip_config.sh %s " % " ".join(lips)
    rc, so, se = utils.remote_cmd(ip, cmd)
    if rc != 0:
        message = "Cfg lips failed, lb:%s, error:%s" % (lb, se)
        logger.error(message)
        return False

    return True