From b46b5dc05ff46428a00f49a7f00f1a9517af5cc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A5=A5=E8=B6=85?= Date: Thu, 3 Jun 2021 22:08:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9F=9F=E5=90=8D=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E9=9B=86=E7=BE=A4=E6=A3=80=E6=B5=8B=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E8=8A=82=E7=82=B9=E7=9A=84Bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/installers/deploy_manager.go | 43 +++++++++++++++++-- internal/installers/deploy_manager_test.go | 12 +++++- internal/installers/queue_test.go | 2 +- .../services/nameservers/service_ns_node.go | 22 +++++++++- internal/rpc/services/service_node.go | 6 +-- 5 files changed, 75 insertions(+), 10 deletions(-) diff --git a/internal/installers/deploy_manager.go b/internal/installers/deploy_manager.go index a5c961e1..70df1f43 100644 --- a/internal/installers/deploy_manager.go +++ b/internal/installers/deploy_manager.go @@ -26,11 +26,11 @@ func NewDeployManager() *DeployManager { } } -// 加载所有文件 -func (this *DeployManager) LoadFiles() []*DeployFile { +// LoadNodeFiles 加载所有边缘节点文件 +func (this *DeployManager) LoadNodeFiles() []*DeployFile { keyMap := map[string]*DeployFile{} // key => File - reg := regexp.MustCompile(`(\w+)-(\w+)-v([0-9.]+)\.zip`) + reg := regexp.MustCompile(`^edge-node-(\w+)-(\w+)-v([0-9.]+)\.zip$`) for _, file := range files.NewFile(this.dir).List() { name := file.Name() if !reg.MatchString(name) { @@ -60,3 +60,40 @@ func (this *DeployManager) LoadFiles() []*DeployFile { } return result } + + + +// LoadNSNodeFiles 加载所有文件 +func (this *DeployManager) LoadNSNodeFiles() []*DeployFile { + keyMap := map[string]*DeployFile{} // key => File + + reg := regexp.MustCompile(`^edge-dns-(\w+)-(\w+)-v([0-9.]+)\.zip$`) + for _, file := range files.NewFile(this.dir).List() { + name := file.Name() + if !reg.MatchString(name) { + continue + } + matches := reg.FindStringSubmatch(name) + osName := matches[1] + arch := matches[2] + version := matches[3] + + key := osName + "_" + arch + oldFile, ok := keyMap[key] + if ok && stringutil.VersionCompare(oldFile.Version, version) > 0 { + continue + } + keyMap[key] = &DeployFile{ + OS: osName, + Arch: arch, + Version: version, + Path: file.Path(), + } + } + + result := []*DeployFile{} + for _, v := range keyMap { + result = append(result, v) + } + return result +} \ No newline at end of file diff --git a/internal/installers/deploy_manager_test.go b/internal/installers/deploy_manager_test.go index 1a98ddcb..7a291099 100644 --- a/internal/installers/deploy_manager_test.go +++ b/internal/installers/deploy_manager_test.go @@ -2,8 +2,16 @@ package installers import "testing" -func TestDeployManager_LoadFiles(t *testing.T) { - files := NewDeployManager().LoadFiles() +func TestDeployManager_LoadNodeFiles(t *testing.T) { + files := NewDeployManager().LoadNodeFiles() + for _, file := range files { + t.Logf("%#v", file) + } +} + + +func TestDeployManager_LoadNSNodeFiles(t *testing.T) { + files := NewDeployManager().LoadNSNodeFiles() for _, file := range files { t.Logf("%#v", file) } diff --git a/internal/installers/queue_test.go b/internal/installers/queue_test.go index ea2b78c3..c5b3c9fc 100644 --- a/internal/installers/queue_test.go +++ b/internal/installers/queue_test.go @@ -7,7 +7,7 @@ import ( func TestQueue_InstallNode(t *testing.T) { queue := NewQueue() - err := queue.InstallNodeProcess(16) + err := queue.InstallNodeProcess(16, false) if err != nil { t.Fatal(err) } diff --git a/internal/rpc/services/nameservers/service_ns_node.go b/internal/rpc/services/nameservers/service_ns_node.go index ea05e57d..079698e8 100644 --- a/internal/rpc/services/nameservers/service_ns_node.go +++ b/internal/rpc/services/nameservers/service_ns_node.go @@ -12,6 +12,7 @@ import ( rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils" "github.com/TeaOSLab/EdgeCommon/pkg/configutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + stringutil "github.com/iwind/TeaGo/utils/string" ) // NSNodeService 域名服务器节点服务 @@ -135,7 +136,7 @@ func (this *NSNodeService) CountAllUpgradeNSNodesWithNSClusterId(ctx context.Con tx := this.NullTx() - deployFiles := installers.SharedDeployManager.LoadFiles() + deployFiles := installers.SharedDeployManager.LoadNSNodeFiles() total := int64(0) for _, deployFile := range deployFiles { count, err := nameservers.SharedNSNodeDAO.CountAllLowerVersionNodesWithClusterId(tx, req.NsClusterId, deployFile.OS, deployFile.Arch, deployFile.Version) @@ -365,3 +366,22 @@ func (this *NSNodeService) FindCurrentNSNodeConfig(ctx context.Context, req *pb. } return &pb.FindCurrentNSNodeConfigResponse{NsNodeJSON: configJSON}, nil } + +// CheckNSNodeLatestVersion 检查新版本 +func (this *NSNodeService) CheckNSNodeLatestVersion(ctx context.Context, req *pb.CheckNSNodeLatestVersionRequest) (*pb.CheckNSNodeLatestVersionResponse, error) { + _, err := this.ValidateAdmin(ctx, 0) + if err != nil { + return nil, err + } + + deployFiles := installers.SharedDeployManager.LoadNSNodeFiles() + for _, file := range deployFiles { + if file.OS == req.Os && file.Arch == req.Arch && stringutil.VersionCompare(file.Version, req.CurrentVersion) > 0 { + return &pb.CheckNSNodeLatestVersionResponse{ + HasNewVersion: true, + NewVersion: file.Version, + }, nil + } + } + return &pb.CheckNSNodeLatestVersionResponse{HasNewVersion: false}, nil +} diff --git a/internal/rpc/services/service_node.go b/internal/rpc/services/service_node.go index eb915d6c..db43245c 100644 --- a/internal/rpc/services/service_node.go +++ b/internal/rpc/services/service_node.go @@ -885,7 +885,7 @@ func (this *NodeService) CountAllUpgradeNodesWithNodeClusterId(ctx context.Conte tx := this.NullTx() - deployFiles := installers.SharedDeployManager.LoadFiles() + deployFiles := installers.SharedDeployManager.LoadNodeFiles() total := int64(0) for _, deployFile := range deployFiles { count, err := models.SharedNodeDAO.CountAllLowerVersionNodesWithClusterId(tx, req.NodeClusterId, deployFile.OS, deployFile.Arch, deployFile.Version) @@ -909,7 +909,7 @@ func (this *NodeService) FindAllUpgradeNodesWithNodeClusterId(ctx context.Contex tx := this.NullTx() // 获取当前能升级到的最新版本 - deployFiles := installers.SharedDeployManager.LoadFiles() + deployFiles := installers.SharedDeployManager.LoadNodeFiles() result := []*pb.FindAllUpgradeNodesWithNodeClusterIdResponse_NodeUpgrade{} for _, deployFile := range deployFiles { nodes, err := models.SharedNodeDAO.FindAllLowerVersionNodesWithClusterId(tx, req.NodeClusterId, deployFile.OS, deployFile.Arch, deployFile.Version) @@ -1322,7 +1322,7 @@ func (this *NodeService) CheckNodeLatestVersion(ctx context.Context, req *pb.Che return nil, err } - deployFiles := installers.SharedDeployManager.LoadFiles() + deployFiles := installers.SharedDeployManager.LoadNodeFiles() for _, file := range deployFiles { if file.OS == req.Os && file.Arch == req.Arch && stringutil.VersionCompare(file.Version, req.CurrentVersion) > 0 { return &pb.CheckNodeLatestVersionResponse{