From 4bdd97ca7394c9c17e7b32108055950f5974dbc9 Mon Sep 17 00:00:00 2001 From: IceDerce Date: Tue, 20 Jun 2023 16:43:33 +0800 Subject: [PATCH] [Excution] - base function start -2 --- agent-go/executor/BaseFunction.go | 182 ++++++++++++------ agent-go/executor/BaseFunction_test.go | 21 +- agent-go/executor/CommandExecutor.go | 1 - agent-go/executor/RealTimeExecutor.go | 8 +- .../main/java/io/wdd/ServerApplication.java | 1 + 5 files changed, 141 insertions(+), 72 deletions(-) diff --git a/agent-go/executor/BaseFunction.go b/agent-go/executor/BaseFunction.go index 83755b7..e523071 100644 --- a/agent-go/executor/BaseFunction.go +++ b/agent-go/executor/BaseFunction.go @@ -7,9 +7,9 @@ type BaseFunc interface { } type AgentOsOperator struct { - InstallCommandPrefix string `json:"install_command_prefix",comment:"apt-get install or yum install"` + InstallCommandPrefix []string `json:"install_command_prefix",comment:"apt-get install or yum install"` - RemoveCommandPrefix string `json:"remove_command_prefix",comment:"apt-get remove or yum remove"` + RemoveCommandPrefix []string `json:"remove_command_prefix",comment:"apt-get remove or yum remove"` CanAccessInternet bool `json:"can_access_internet",comment:"是否可以访问公网"` @@ -31,6 +31,9 @@ func (op *AgentOsOperator) Exec(baseFuncName string, funcArgs ...string) string case "modifyHostname": multiLineCommand = op.modifyHostname(funcArgs) break + case "enableSwap": + multiLineCommand = op.enableSwap() + break case "disableSwap": multiLineCommand = op.disableSwap() break @@ -72,11 +75,15 @@ func (op *AgentOsOperator) Exec(baseFuncName string, funcArgs ...string) string } + log.DebugF("multiLineCommand are => %v", multiLineCommand) + // exec the command here - result, _ := MultiLineCommandExecutor(multiLineCommand) + for _, singleLineCommand := range multiLineCommand { + ReadTimeCommandExecutor(singleLineCommand) + } // 归一化处理 - return strings.Join(result, "") + return strings.Join([]string{}, "") } func (op *AgentOsOperator) shutdownFirewall() [][]string { @@ -105,6 +112,24 @@ func (op *AgentOsOperator) modifyHostname(args []string) [][]string { return [][]string{} } +func (op *AgentOsOperator) enableSwap() [][]string { + + enableSwapFunc := [][]string{ + { + "cp", + "-f", + "/etc/fstab_back", + "/etc/fstab", + }, + { + "cat", + "/etc/fstab", + }, + } + + return enableSwapFunc +} + func (op *AgentOsOperator) disableSwap() [][]string { disableSwapFunc := [][]string{ @@ -116,16 +141,12 @@ func (op *AgentOsOperator) disableSwap() [][]string { "cp", "-f", "/etc/fstab", - "/etc/fstab_bak", + "/etc/fstab_back", }, { - "cat", - "/etc/fstab_bak", - "|", - "grep", - "-v", - "swap", - ">", + "sed", + "-i", + "/swap/d", "/etc/fstab", }, } @@ -135,24 +156,25 @@ func (op *AgentOsOperator) disableSwap() [][]string { func (op *AgentOsOperator) removeDocker() [][]string { + removeDockerLine := append(op.RemoveCommandPrefix, []string{ + "docker", + "docker-client", + "docker-client-latest", + "docker-ce-cli", + "docker-common", + "docker-latest", + "docker-latest-logrotate", + "docker-logrotate", + "docker-selinux", + "docker-engine-selinux", + "docker-engine", + "kubelet", + "kubeadm", + "kubectl", + }...) + removeDockerFunc := [][]string{ - { - op.RemoveCommandPrefix, - "docker", - "docker-client", - "docker-client-latest", - "docker-ce-cli", - "docker-common", - "docker-latest", - "docker-latest-logrotate", - "docker-logrotate", - "docker-selinux", - "docker-engine-selinux", - "docker-engine", - "kubelet", - "kubeadm", - "kubectl", - }, + removeDockerLine, } return removeDockerFunc @@ -164,37 +186,81 @@ func (op *AgentOsOperator) installDocker(args []string) [][]string { installDockerFunc := op.removeDocker() if op.IsOsTypeUbuntu { - installDockerFunc = append(installDockerFunc, [][]string{ - { - op.InstallCommandPrefix, - "apt-transport-https ca-certificates curl gnupg-agent software-properties-common", - }, - { - "apt-key", - "add", - "-", - "$(curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg)", - }, + // + installFirstLine := append(op.InstallCommandPrefix, []string{ + "apt-transport-https", + "ca-certificates", + "curl", + "gnupg-agent", + "software-properties-common", }...) + + if op.IsAgentInnerWall { + // inner gfw + installDockerFunc = append(installDockerFunc, [][]string{ + installFirstLine, + { + "curl", + "-o", + "/etc/docker/docker-utsc.gpg", + "https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg", + }, + { + "apt-key", + "add", + "/etc/docker/docker-utsc.gpg", + }, + }...) + } else { + // outside world + installDockerFunc = append(installDockerFunc, [][]string{ + installFirstLine, + { + "curl", + "-o", + "/etc/docker/docker-utsc.gpg", + "https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg", + }, + { + "apt-key", + "add", + "/etc/docker/docker-utsc.gpg", + }, + }...) + } + + // look for specific docker-version to install + } else { - installDockerFunc = append(installDockerFunc, [][]string{ - { - op.InstallCommandPrefix, - "yum-utils device-mapper-persistent-data lvm2", - }, - { - "yum-config-manager", - "--add-repo", - "https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo", - }, - { - "sed ", - "-i ", - "'s/download.docker.com/mirrors.ustc.edu.cn\\/docker-ce/g' ", - "/etc/yum.repos.d/docker-ce.repo", - }, - {}, - }...) + installFirstLine := append(op.InstallCommandPrefix, + []string{ + "yum-utils", + "device-mapper-persistent-data", + "lvm2", + }..., + ) + + if op.IsAgentInnerWall { + // inner gfw + installDockerFunc = append(installDockerFunc, [][]string{ + installFirstLine, + { + "yum-config-manager", + "--add-repo", + "https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo", + }, + { + "sed ", + "-i ", + "'s/download.docker.com/mirrors.ustc.edu.cn\\/docker-ce/g' ", + "/etc/yum.repos.d/docker-ce.repo", + }, + {}, + }...) + } else { + // outside world + } + } return installDockerFunc diff --git a/agent-go/executor/BaseFunction_test.go b/agent-go/executor/BaseFunction_test.go index 6a860b9..37920f3 100644 --- a/agent-go/executor/BaseFunction_test.go +++ b/agent-go/executor/BaseFunction_test.go @@ -3,19 +3,22 @@ package executor import "testing" var agentOP = AgentOsOperator{ - InstallCommandPrefix: "apt-get install", - RemoveCommandPrefix: "apt-get remove", - CanAccessInternet: true, - IsOsTypeUbuntu: true, - IsAgentInnerWall: true, + InstallCommandPrefix: []string{ + "apt-get", "install", "-y", + }, + RemoveCommandPrefix: []string{"/usr/bin/apt", "remove", "-y"}, + CanAccessInternet: true, + IsOsTypeUbuntu: true, + IsAgentInnerWall: true, } func TestBaseFunc(t *testing.T) { - agentOP.Exec("shutdownFirewall") - agentOP.Exec("modifyHostname") - agentOP.Exec("disableSwap") + //agentOP.Exec("shutdownFirewall") + //agentOP.Exec("modifyHostname") + //agentOP.Exec("disableSwap") + //agentOP.Exec("enableSwap") + //agentOP.Exec("removeDocker") agentOP.Exec("installDocker") - agentOP.Exec("removeDocker") } diff --git a/agent-go/executor/CommandExecutor.go b/agent-go/executor/CommandExecutor.go index 3c65b4d..1a16a89 100644 --- a/agent-go/executor/CommandExecutor.go +++ b/agent-go/executor/CommandExecutor.go @@ -102,7 +102,6 @@ func SingleLineCommandExecutor(singleLineCommand []string) ([]string, error) { var result []string for scanner.Scan() { result = append(result, scanner.Text()) - } if err != nil { diff --git a/agent-go/executor/RealTimeExecutor.go b/agent-go/executor/RealTimeExecutor.go index ff16f8b..b56c642 100644 --- a/agent-go/executor/RealTimeExecutor.go +++ b/agent-go/executor/RealTimeExecutor.go @@ -12,22 +12,22 @@ func ReadTimeCommandExecutor(singleLineCommand []string) { cmd := exec.Command(singleLineCommand[0], singleLineCommand[1:]...) stdout, err := cmd.StdoutPipe() if err != nil { - panic(err) + log.ErrorF("command %v stdout error => %v", singleLineCommand, err) } stderr, err := cmd.StderrPipe() if err != nil { - panic(err) + log.ErrorF("command %v stderr error => %v", singleLineCommand, err) } if err := cmd.Start(); err != nil { - panic(err) + log.ErrorF("command %v runtime error => %v", singleLineCommand, err) } go copyOutput(stdout) go copyOutput(stderr) if err := cmd.Wait(); err != nil { - panic(err) + log.ErrorF("command %v result error => %v", singleLineCommand, err) } } diff --git a/server/src/main/java/io/wdd/ServerApplication.java b/server/src/main/java/io/wdd/ServerApplication.java index c3effd6..07d8464 100644 --- a/server/src/main/java/io/wdd/ServerApplication.java +++ b/server/src/main/java/io/wdd/ServerApplication.java @@ -8,6 +8,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @MapperScan("io.wdd.server.mapper") public class ServerApplication { + public static void main(String[] args) { SpringApplication.run(ServerApplication.class, args); }