From 51e180995f3a27711dda39c7f5d6e169b52e9c3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B7=AE=E5=8F=B3?= Date: Tue, 5 Jul 2022 13:38:18 +0800 Subject: [PATCH] Fix when virtual server config be removed. (#33) * Fix when virtual server config be removed. Signed-off-by: huaiyou * If target ip is nil, skip sync route. Signed-off-by: huaiyou --- care/care.go | 15 ++++++++++++--- cmd/care.go | 4 ++++ service/service.go | 2 +- utils/utils.go | 2 +- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/care/care.go b/care/care.go index 4c5b1bf..fbda650 100644 --- a/care/care.go +++ b/care/care.go @@ -36,6 +36,17 @@ func (care *LvsCare) VsAndRsCare() { for { select { case <-t.C: + // in some cases, virtual server maybe removed + isAvailable := care.lvs.IsVirtualServerAvailable(care.VirtualServer) + if !isAvailable { + err := care.lvs.CreateVirtualServer(care.VirtualServer, true) + //virtual server is exists + if err != nil { + glog.Errorf("failed to create virtual server: %v", err) + + return + } + } //check real server lvs.CheckRealServers(care.HealthPath, care.HealthSchem) case signa := <-sig: @@ -75,8 +86,6 @@ func SetTargetIP() error { if LVS.TargetIP == nil { LVS.TargetIP = net.ParseIP(os.Getenv("LVSCARE_NODE_IP")) } - if LVS.TargetIP == nil { - return errors.New("target ip can't empty") - } + return nil } diff --git a/cmd/care.go b/cmd/care.go index 17d3bf0..0c918be 100644 --- a/cmd/care.go +++ b/cmd/care.go @@ -32,6 +32,10 @@ var careCmd = &cobra.Command{ if err := care.SetTargetIP(); err != nil { return err } + // if target ip is empty, skip sync router + if care.LVS.TargetIP == nil { + return nil + } return care.LVS.SyncRouter() }, } diff --git a/service/service.go b/service/service.go index b40751a..ad74bc4 100644 --- a/service/service.go +++ b/service/service.go @@ -158,7 +158,7 @@ func (l *lvscare) CheckRealServers(path, schem string) { //add it back ip := realServer.IP port := strconv.Itoa(int(realServer.Port)) - err := l.CreateRealServer(ip+":"+port, false) + err := l.CreateRealServer(net.JoinHostPort(ip, port), false) if err != nil { glog.Warningf("CheckRealServers error[add real server failed]: %s; %d; %v ", realServer.IP, realServer.Port, err) } diff --git a/utils/utils.go b/utils/utils.go index fdb1037..80b167b 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -33,7 +33,7 @@ func SplitServer(server string) (string, uint16) { //IsHTTPAPIHealth is check http error func IsHTTPAPIHealth(ip, port, path, schem string) bool { http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: true} - url := fmt.Sprintf("%s://%s:%s%s", schem, ip, port, path) + url := fmt.Sprintf("%s://%s%s", schem, net.JoinHostPort(ip, port), path) resp, err := http.Get(url) if err != nil { glog.V(8).Infof("IsHTTPAPIHealth error: %v", err)