Files
ProjectOctopus/agent-go/executor/BaseFunction.go
2023-06-20 14:22:24 +08:00

253 lines
5.0 KiB
Go

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, " ")},
}
}