From 8f92d0c5186efaa7c983c74515dda7da8a13f3ce Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Mon, 16 Nov 2020 15:26:51 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BD=91=E7=AB=99=E6=9C=8D=E5=8A=A1=E5=8F=98?= =?UTF-8?q?=E6=9B=B4=E4=B9=9F=E8=83=BD=E8=87=AA=E5=8A=A8=E5=90=8C=E6=AD=A5?= =?UTF-8?q?DNS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/db/models/dns_provider_dao.go | 10 +++++ internal/db/models/server_dao.go | 8 ++++ internal/rpc/services/service_server.go | 54 +++++++++++++++++++++++++ 3 files changed, 72 insertions(+) diff --git a/internal/db/models/dns_provider_dao.go b/internal/db/models/dns_provider_dao.go index 1aee569e..a8187199 100644 --- a/internal/db/models/dns_provider_dao.go +++ b/internal/db/models/dns_provider_dao.go @@ -6,6 +6,7 @@ import ( "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/dbs" "github.com/iwind/TeaGo/types" + "time" ) const ( @@ -131,3 +132,12 @@ func (this *DNSProviderDAO) FindAllEnabledDNSProvidersWithType(providerType stri FindAll() return } + +// 更新数据更新时间 +func (this *DNSProviderDAO) UpdateProviderDataUpdatedTime(providerId int64) error { + _, err := this.Query(). + Pk(providerId). + Set("dataUpdatedAt", time.Now().Unix()). + Update() + return err +} diff --git a/internal/db/models/server_dao.go b/internal/db/models/server_dao.go index 7c41d7c0..2f30a80b 100644 --- a/internal/db/models/server_dao.go +++ b/internal/db/models/server_dao.go @@ -862,6 +862,14 @@ func (this *ServerDAO) createEvent() error { return SharedSysEventDAO.CreateEvent(NewServerChangeEvent()) } +// 查询当前服务的ClusterId +func (this *ServerDAO) FindServerClusterId(serverId int64) (int64, error) { + return this.Query(). + Pk(serverId). + Result("clusterId"). + FindInt64Col(0) +} + // 生成DNS Name func (this *ServerDAO) genDNSName() (string, error) { for { diff --git a/internal/rpc/services/service_server.go b/internal/rpc/services/service_server.go index 450d4b42..5813c5b6 100644 --- a/internal/rpc/services/service_server.go +++ b/internal/rpc/services/service_server.go @@ -8,6 +8,7 @@ import ( rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" + "github.com/iwind/TeaGo/logs" ) type ServerService struct { @@ -60,6 +61,17 @@ func (this *ServerService) UpdateServerBasic(ctx context.Context, req *pb.Update return nil, err } + // 检查服务变化 + oldIsOn := server.IsOn == 1 + if oldIsOn != req.IsOn { + go func() { + err := this.notifyServerDNSChanged(req.ServerId) + if err != nil { + logs.Println("[DNS]notify server changed: " + err.Error()) + } + }() + } + // 更新老的节点版本 if req.ClusterId != int64(server.ClusterId) { err = models.SharedNodeDAO.UpdateAllNodesLatestVersionMatch(int64(server.ClusterId)) @@ -890,3 +902,45 @@ func (this *ServerService) FindAllEnabledServersDNSWithClusterId(ctx context.Con return &pb.FindAllEnabledServersDNSWithClusterIdResponse{Servers: result}, nil } + +// 自动同步DNS状态 +func (this *ServerService) notifyServerDNSChanged(serverId int64) error { + clusterId, err := models.SharedServerDAO.FindServerClusterId(serverId) + if err != nil { + return err + } + dnsInfo, err := models.SharedNodeClusterDAO.FindClusterDNSInfo(clusterId) + if err != nil { + return err + } + if dnsInfo == nil { + return nil + } + if len(dnsInfo.DnsName) == 0 || dnsInfo.DnsDomainId == 0 { + return nil + } + dnsConfig, err := dnsInfo.DecodeDNSConfig() + if err != nil { + return err + } + if !dnsConfig.ServersAutoSync { + return nil + } + + // 执行同步 + domainService := &DNSDomainService{} + resp, err := domainService.syncClusterDNS(&pb.SyncDNSDomainDataRequest{ + DnsDomainId: int64(dnsInfo.DnsDomainId), + NodeClusterId: clusterId, + }) + if err != nil { + return err + } + if !resp.IsOk { + err = models.SharedMessageDAO.CreateClusterMessage(clusterId, models.MessageTypeClusterDNSSyncFailed, models.LevelError, "集群DNS同步失败:"+resp.Error, nil) + if err != nil { + logs.Println("[NODE_SERVICE]" + err.Error()) + } + } + return nil +}