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}
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