From 6f655a772d35b96490e3d12b6d75c0f2fde9a9b7 Mon Sep 17 00:00:00 2001 From: zeaslity Date: Tue, 20 Jun 2023 14:22:24 +0800 Subject: [PATCH] [ Executor ] exec function - 1 --- agent-go/executor/BaseFunction.go | 252 ++++++++++++++++++ agent-go/executor/BaseFunction_test.go | 21 ++ agent-go/executor/function/BaseFunction.go | 136 ---------- agent-go/executor/script/shutdownFirewall.txt | 2 + 4 files changed, 275 insertions(+), 136 deletions(-) create mode 100644 agent-go/executor/BaseFunction.go create mode 100644 agent-go/executor/BaseFunction_test.go delete mode 100644 agent-go/executor/function/BaseFunction.go create mode 100644 agent-go/executor/script/shutdownFirewall.txt diff --git a/agent-go/executor/BaseFunction.go b/agent-go/executor/BaseFunction.go new file mode 100644 index 0000000..83755b7 --- /dev/null +++ b/agent-go/executor/BaseFunction.go @@ -0,0 +1,252 @@ +package executor + +import "strings" + +type BaseFunc interface { + Exec(baseFuncName string, funcArgs ...string) string +} + +type AgentOsOperator struct { + 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"` + + CanAccessInternet bool `json:"can_access_internet",comment:"是否可以访问公网"` + + IsOsTypeUbuntu bool `json:"is_os_type_ubuntu",comment:"主机操作系统是否为ubuntu系列"` + + IsAgentInnerWall bool `json:"is_agent_inner_wall", comment:"主机是否身处国内"` +} + +// Exec 执行基础功能函数 +func (op *AgentOsOperator) Exec(baseFuncName string, funcArgs ...string) string { + + var multiLineCommand [][]string + + switch baseFuncName { + + case "shutdownFirewall": + multiLineCommand = op.shutdownFirewall() + break + case "modifyHostname": + multiLineCommand = op.modifyHostname(funcArgs) + break + case "disableSwap": + multiLineCommand = op.disableSwap() + break + case "installDocker": + multiLineCommand = op.installDocker(funcArgs) + break + case "removeDocker": + multiLineCommand = op.removeDocker() + break + case "installDockerCompose": + multiLineCommand = op.installDockerCompose() + break + case "modifyDockerConfig": + multiLineCommand = op.modifyDockerConfig() + break + case "installHelm": + multiLineCommand = op.installHelm() + break + case "installHarbor": + multiLineCommand = op.installHarbor(funcArgs) + break + case "chronyToPublicNTP": + multiLineCommand = op.chronyToPublicNTP() + break + case "chronyToMaster": + multiLineCommand = op.chronyToMaster(funcArgs) + break + case "installZSH": + multiLineCommand = op.installZSH() + break + case "modifySshPort": + multiLineCommand = op.modifySshPort(funcArgs) + break + case "openBBR": + multiLineCommand = op.openBBR() + break + default: + multiLineCommand = op.ok(funcArgs) + + } + + // exec the command here + result, _ := MultiLineCommandExecutor(multiLineCommand) + + // 归一化处理 + return strings.Join(result, "") +} + +func (op *AgentOsOperator) shutdownFirewall() [][]string { + + shutdownFunc := [][]string{ + {"systemctl", "stop", "firewalld"}, + {"systemctl", "disable", "firewalld"}, + } + + if !op.IsOsTypeUbuntu { + shutdownFunc = append(shutdownFunc, + []string{ + "sed", + "-i", + "s/SELINUX=enforcing/SELINUX=disabled/g", + "/etc/selinux/config", + }, + ) + } + + return shutdownFunc +} + +func (op *AgentOsOperator) modifyHostname(args []string) [][]string { + + return [][]string{} +} + +func (op *AgentOsOperator) disableSwap() [][]string { + + disableSwapFunc := [][]string{ + { + "swapoff", + "-a", + }, + { + "cp", + "-f", + "/etc/fstab", + "/etc/fstab_bak", + }, + { + "cat", + "/etc/fstab_bak", + "|", + "grep", + "-v", + "swap", + ">", + "/etc/fstab", + }, + } + + return disableSwapFunc +} + +func (op *AgentOsOperator) removeDocker() [][]string { + + 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", + }, + } + + return removeDockerFunc +} + +func (op *AgentOsOperator) installDocker(args []string) [][]string { + + // remove docker all staff + 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)", + }, + }...) + } 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", + }, + {}, + }...) + } + + return installDockerFunc +} + +func (op *AgentOsOperator) installDockerCompose() [][]string { + + return [][]string{} +} + +func (op *AgentOsOperator) installHelm() [][]string { + + return [][]string{} +} + +func (op *AgentOsOperator) modifyDockerConfig() [][]string { + + return [][]string{} +} + +func (op *AgentOsOperator) installHarbor(args []string) [][]string { + + return [][]string{} +} + +func (op *AgentOsOperator) chronyToPublicNTP() [][]string { + + return [][]string{} +} + +func (op *AgentOsOperator) chronyToMaster(args []string) [][]string { + + return [][]string{} +} + +func (op *AgentOsOperator) installZSH() [][]string { + + return [][]string{} +} + +func (op *AgentOsOperator) modifySshPort(args []string) [][]string { + + return [][]string{} +} + +func (op *AgentOsOperator) openBBR() [][]string { + + return [][]string{} +} + +func (op *AgentOsOperator) ok(args []string) [][]string { + return [][]string{ + {"base function is ok , args are => " + strings.Join(args, " ")}, + } +} diff --git a/agent-go/executor/BaseFunction_test.go b/agent-go/executor/BaseFunction_test.go new file mode 100644 index 0000000..6a860b9 --- /dev/null +++ b/agent-go/executor/BaseFunction_test.go @@ -0,0 +1,21 @@ +package executor + +import "testing" + +var agentOP = AgentOsOperator{ + InstallCommandPrefix: "apt-get install", + RemoveCommandPrefix: "apt-get remove", + CanAccessInternet: true, + IsOsTypeUbuntu: true, + IsAgentInnerWall: true, +} + +func TestBaseFunc(t *testing.T) { + + agentOP.Exec("shutdownFirewall") + agentOP.Exec("modifyHostname") + agentOP.Exec("disableSwap") + agentOP.Exec("installDocker") + agentOP.Exec("removeDocker") + +} diff --git a/agent-go/executor/function/BaseFunction.go b/agent-go/executor/function/BaseFunction.go deleted file mode 100644 index 348ff45..0000000 --- a/agent-go/executor/function/BaseFunction.go +++ /dev/null @@ -1,136 +0,0 @@ -package function - -import "strings" - -type BaseFunc interface { - Exec(baseFuncName string, funcArgs ...string) string -} - -type AgentOsOperator struct { - execCommandPrefix string `json:"exec_command_prefix",comment:"apt-get or yum or zapper"` - - canAccessInternet bool `json:"can_access_internet",comment:"是否可以访问公网"` -} - -// Exec 执行基础功能函数 -func (op *AgentOsOperator) Exec(baseFuncName string, funcArgs ...string) string { - - result := "" - - switch baseFuncName { - - case "shutdownFirewall": - result = op.shutdownFirewall() - break - case "modifyHostname": - result = op.modifyHostname(funcArgs) - break - case "disableSwap": - result = op.disableSwap() - break - case "installDocker": - result = op.installDocker(funcArgs) - break - case "installDockerCompose": - result = op.installDockerCompose() - break - case "modifyDockerConfig": - result = op.modifyDockerConfig() - break - case "installHelm": - result = op.installHelm() - break - case "installHarbor": - result = op.installHarbor(funcArgs) - break - case "chronyToPublicNTP": - result = op.chronyToPublicNTP() - break - case "chronyToMaster": - result = op.chronyToMaster(funcArgs) - break - case "installZSH": - result = op.installZSH() - break - case "modifySshPort": - result = op.modifySshPort(funcArgs) - break - case "openBBR": - result = op.openBBR() - break - default: - result = op.ok(funcArgs) - - } - - return result -} - -func (op *AgentOsOperator) shutdownFirewall() string { - - return "" -} - -func (op *AgentOsOperator) modifyHostname(args []string) string { - - return "" -} - -func (op *AgentOsOperator) disableSwap() string { - - return "" -} - -func (op *AgentOsOperator) installDocker(args []string) string { - - return "" -} - -func (op *AgentOsOperator) installDockerCompose() string { - - return "" -} - -func (op *AgentOsOperator) installHelm() string { - - return "" -} - -func (op *AgentOsOperator) modifyDockerConfig() string { - - return "" -} - -func (op *AgentOsOperator) installHarbor(args []string) string { - - return "" -} - -func (op *AgentOsOperator) chronyToPublicNTP() string { - - return "" -} - -func (op *AgentOsOperator) chronyToMaster(args []string) string { - - return "" -} - -func (op *AgentOsOperator) installZSH() string { - - return "" -} - -func (op *AgentOsOperator) modifySshPort(args []string) string { - - return "" -} - -func (op *AgentOsOperator) openBBR() string { - - return "" -} - -func (op *AgentOsOperator) ok(args []string) string { - return "base function is ok , args are => " + strings.Join(args, " ") -} diff --git a/agent-go/executor/script/shutdownFirewall.txt b/agent-go/executor/script/shutdownFirewall.txt new file mode 100644 index 0000000..f311be2 --- /dev/null +++ b/agent-go/executor/script/shutdownFirewall.txt @@ -0,0 +1,2 @@ +systemctl stop firewalld +systemctl disable firewalld \ No newline at end of file