From e8f0e0d4a9cc19885bf0296c27347c15b2de2acf Mon Sep 17 00:00:00 2001 From: zeaslity Date: Wed, 26 Feb 2025 17:49:03 +0800 Subject: [PATCH] 123 --- agent-wdd/cmd/Base.go | 45 +++++++++++++++++-- .../DownloadUtils.go} | 2 +- agent-wdd/utils/FileUtils.go | 15 +++++++ 3 files changed, 58 insertions(+), 4 deletions(-) rename agent-wdd/{op/DownloadExecutor.go => utils/DownloadUtils.go} (98%) diff --git a/agent-wdd/cmd/Base.go b/agent-wdd/cmd/Base.go index 7a7ce71..c669c78 100644 --- a/agent-wdd/cmd/Base.go +++ b/agent-wdd/cmd/Base.go @@ -20,15 +20,18 @@ var ( "deltarpm", "net-tools", "iputils", "bind-utils", "lsof", "curl", "wget", "vim", "mtr", "htop", } - dockerLocalInstallPath = "/root/wdd/docker-amd64-20.10.15.tgz" // 本地安装docker的文件路径 + dockerLocalInstallPath = "/root/wdd/docker-amd64-20.10.15.tgz" // 本地安装docker的文件路径 + dockerComposeLocalInstallPath = "/root/wdd/docker-compose-v2.18.0-linux-amd64" // 本地安装docker compose的文件路径 ) func init() { switch runtime.GOARCH { case "amd64": - dockerLocalInstallPath = "/root/wdd/docker-amd64-20.10.15.tgz" // 本地安装docker的文件路径 + dockerLocalInstallPath = "/root/wdd/docker-amd64-20.10.15.tgz" // 本地安装docker的文件路径 + dockerComposeLocalInstallPath = "/root/wdd/docker-compose-v2.18.0-linux-amd64" // 本地安装docker compose的文件路径 case "arm64": - dockerLocalInstallPath = "/root/wdd/docker-arm64-20.10.15.tgz" // 本地安装docker的文件路径 + dockerLocalInstallPath = "/root/wdd/docker-arm64-20.10.15.tgz" // 本地安装docker的文件路径 + dockerComposeLocalInstallPath = "/root/wdd/docker-compose-v2.18.0-linux-arm64" // 本地安装docker compose的文件路径 } } @@ -293,6 +296,13 @@ func addDockerComposeSubcommands(cmd *cobra.Command) { Short: "卸载Docker Compose", Run: func(cmd *cobra.Command, args []string) { log.Info("Removing Docker Compose...") + + if utils.RemoveFile("/usr/local/bin/docker-compose") { + log.Info("Docker Compose removed successfully!") + } else { + log.Error("Failed to remove Docker Compose!") + } + }, } @@ -302,6 +312,29 @@ func addDockerComposeSubcommands(cmd *cobra.Command) { Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { log.Info("Installing Docker Compose from local file...") + + exist := utils.FileExistAndNotNull(dockerLocalInstallPath) + if !exist { + log.Error("Docker local install file not found: %s", dockerLocalInstallPath) + return + } + + // move file to /usr/local/bin + err := utils.MoveFolerToAnother(dockerComposeLocalInstallPath, "/usr/local/bin") + if err != nil { + log.Error("Failed to move Docker Compose binaries: %s", err.Error()) + return + } + + // set permission + chmodCmd := []string{"chmod", "+x", "/usr/local/bin/docker-compose"} + ok, resultLog := op.SingleLineCommandExecutor(chmodCmd) + if !ok { + log.Error("Failed to set permissions for Docker Compose binaries: %s", resultLog) + return + } + + log.Info("Docker Compose installed successfully from local file!") }, } @@ -310,6 +343,12 @@ func addDockerComposeSubcommands(cmd *cobra.Command) { Short: "查看Docker Compose版本", Run: func(cmd *cobra.Command, args []string) { log.Info("Docker Compose version...") + ok, resultLog := op.SingleLineCommandExecutor([]string{"docker-compose", "--version"}) + if !ok { + log.Error("Failed to get Docker Compose version: %s", resultLog) + return + } + log.Info("Docker Compose version: %s", resultLog) }, } diff --git a/agent-wdd/op/DownloadExecutor.go b/agent-wdd/utils/DownloadUtils.go similarity index 98% rename from agent-wdd/op/DownloadExecutor.go rename to agent-wdd/utils/DownloadUtils.go index 720342e..e1b5d8f 100644 --- a/agent-wdd/op/DownloadExecutor.go +++ b/agent-wdd/utils/DownloadUtils.go @@ -1,4 +1,4 @@ -package op +package utils import ( "fmt" diff --git a/agent-wdd/utils/FileUtils.go b/agent-wdd/utils/FileUtils.go index 865325a..01884ed 100644 --- a/agent-wdd/utils/FileUtils.go +++ b/agent-wdd/utils/FileUtils.go @@ -236,6 +236,21 @@ func listAllFileInFolderWithFullPath(folderName string, fullPath bool) ([]string return files, nil } +// RemoveFile 删除文件,如果文件不存在,则返回true +func RemoveFile(filePath string) bool { + + if _, err := os.Stat(filePath); os.IsNotExist(err) { + log.Error("文件不存在: %s", filePath) + return true + } + err := os.Remove(filePath) + if err != nil { + log.Error("Failed to remove file: %s", err.Error()) + return false + } + return true +} + func RemoveFolderComplete(folderName string) bool { err := filepath.Walk(folderName,