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