[ Agent ] [ Executor ] - 初步完成Executor部分的代码

This commit is contained in:
zeaslity
2023-10-17 16:17:12 +08:00
parent db58a7a6f6
commit 0e8f633166
5 changed files with 250 additions and 46 deletions

View File

@@ -127,7 +127,7 @@ func handleInitMsgFromServer(initFromServerQueue *rabbitmq.RabbitQueue, initToSe
serverName := serverInfo.ServerName serverName := serverInfo.ServerName
// 处理OM信息 // 处理OM信息
if initOctopusMsg != nil && strings.HasPrefix(initOctopusMsg.Type, g.InitOmType) && strings.HasPrefix(serverName, agentServerInfo.ServerName) { if initOctopusMsg != nil && strings.HasPrefix(initOctopusMsg.OctopusMessageType, g.InitOmType) && strings.HasPrefix(serverName, agentServerInfo.ServerName) {
// 是本机的注册回复信息 // 是本机的注册回复信息
log.InfoF("OctopusMessage INIT from server is this agent !") log.InfoF("OctopusMessage INIT from server is this agent !")

View File

@@ -34,7 +34,7 @@ type AgentOsOperator struct {
AgentServerInfo *register.AgentServerInfo `json:"agent_server_info"` AgentServerInfo *register.AgentServerInfo `json:"agent_server_info"`
// 离线下载URL地址 // 离线下载URL地址
OssOfflinePrefix string OssOfflinePrefix string `comment:"必须要用 / 结尾"`
} }
func (op *AgentOsOperator) Exec(baseFuncName string, funcArgs ...string) (bool, []string) { func (op *AgentOsOperator) Exec(baseFuncName string, funcArgs ...string) (bool, []string) {
@@ -409,13 +409,13 @@ func (op *AgentOsOperator) installDocker(args []string) [][]string {
{ {
"curl", "curl",
"-o", "-o",
"/usr/share/keyrings/docker-utsc.gpg", "/etc/apt/keyrings/docker-utsc.gpg",
"https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg", "https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg",
}, },
{ {
"apt-key", "apt-key",
"add", "add",
"/usr/share/keyrings/docker-utsc.gpg", "/etc/apt/keyrings/docker-utsc.gpg",
}, },
{ {
"add-apt-repository", "add-apt-repository",
@@ -429,13 +429,13 @@ func (op *AgentOsOperator) installDocker(args []string) [][]string {
{ {
"curl", "curl",
"-o", "-o",
"/usr/share/keyrings/docker.gpg", "/etc/apt/keyrings/docker.gpg",
"https://download.docker.com/linux/ubuntu/gpg ", "https://download.docker.com/linux/ubuntu/gpg ",
}, },
{ {
"apt-key", "apt-key",
"add", "add",
"/usr/share/keyrings/docker.gpg", "/etc/apt/keyrings/docker.gpg",
}, },
{ {
"add-apt-repository", "add-apt-repository",
@@ -501,8 +501,6 @@ func (op *AgentOsOperator) installDocker(args []string) [][]string {
} }
func (op *AgentOsOperator) installDockerExec(args []string) (bool, []string) { func (op *AgentOsOperator) installDockerExec(args []string) (bool, []string) {
var resultLog []string
resultOk = true
if op.IsOsTypeUbuntu { if op.IsOsTypeUbuntu {
@@ -520,51 +518,86 @@ func (op *AgentOsOperator) installDockerExec(args []string) (bool, []string) {
return false, l return false, l
} }
// add dependency dockerGPGFilePath := "/etc/apt/keyrings/docker.gpg"
// 安装镜像的证书
if op.IsAgentInnerWall { if op.IsAgentInnerWall {
// inner gfw // 国内 使用 UTSC 的源
installDockerFunc = append(installDockerFunc, [][]string{ ok, l2 := AllCommandExecutor([]string{
installFirstLine, "curl",
"-o",
dockerGPGFilePath,
"https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg",
})
if !ok {
return false, l2
}
if !BasicFileExistAndNotNull(dockerGPGFilePath) {
return false, []string{"添加gpg失败"}
}
resultOk, log2 := AllCompleteExecutor([][]string{
{ {
"curl", "gpg",
"--dearmor",
"-o", "-o",
"/usr/share/keyrings/docker-utsc.gpg", dockerGPGFilePath,
"https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg",
}, },
{ {
"apt-key", "chmod",
"add", "a+r",
"/usr/share/keyrings/docker-utsc.gpg", dockerGPGFilePath,
}, },
{ {
"add-apt-repository", "add-apt-repository",
"deb [arch=" + op.AgentArch + "] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu " + op.AgentOSReleaseCode + " stable", "deb [arch=" + op.AgentArch + "] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu " + op.AgentOSReleaseCode + " stable",
}, },
}...) })
if !resultOk {
return false, log2
}
} else { } else {
// outside world // outside world
installDockerFunc = append(installDockerFunc, [][]string{ // 国内 使用 UTSC 的源
installFirstLine, ok, l2 := AllCommandExecutor([]string{
"curl",
"-o",
dockerGPGFilePath,
"https://download.docker.com/linux/ubuntu/gpg",
})
if !ok {
return false, l2
}
if !BasicFileExistAndNotNull(dockerGPGFilePath) {
return false, []string{"添加gpg失败"}
}
resultOk, log2 := AllCompleteExecutor([][]string{
{ {
"curl", "gpg",
"--dearmor",
"-o", "-o",
"/usr/share/keyrings/docker.gpg", dockerGPGFilePath,
"https://download.docker.com/linux/ubuntu/gpg ",
}, },
{ {
"apt-key", "chmod",
"add", "a+r",
"/usr/share/keyrings/docker.gpg", dockerGPGFilePath,
}, },
{ {
"add-apt-repository", "add-apt-repository",
"deb [arch=" + op.AgentArch + "] https://download.docker.com/linux/ubuntu " + op.AgentOSReleaseCode + " stable", "deb [arch=" + op.AgentArch + "] https://download.docker.com/linux/ubuntu " + op.AgentOSReleaseCode + " stable",
}, },
}...) })
if !resultOk {
return false, log2
}
} }
// look for specific docker-version to install // look for specific docker-version to install
installDockerFunc = append(installDockerFunc, []string{"apt-get", "update"}) AllCommandExecutor([]string{"apt-get", "update"})
// ubuntu 内部
var specificDockerVersion string var specificDockerVersion string
// hard code here 5:20.10.10~3-0~ubuntu-focal // hard code here 5:20.10.10~3-0~ubuntu-focal
@@ -574,19 +607,19 @@ func (op *AgentOsOperator) installDockerExec(args []string) (bool, []string) {
specificDockerVersion = "5:20.10.10~3-0~ubuntu-" + op.AgentOSReleaseCode specificDockerVersion = "5:20.10.10~3-0~ubuntu-" + op.AgentOSReleaseCode
} }
installDockerFunc = append(installDockerFunc, resultOk, log2 := AllCommandExecutor([]string{
append( "docker-ce=" + specificDockerVersion,
op.InstallCommandPrefix, "docker-ce-cli=" + specificDockerVersion,
"docker-ce="+specificDockerVersion, "containerd.io",
"docker-ce-cli="+specificDockerVersion, "docker-compose-plugin",
"containerd.io", })
"docker-compose-plugin", if !resultOk {
), return false, log2
) }
} }
return resultOk, resultLog return true, nil
} }
func (op *AgentOsOperator) removeDockerCompose() [][]string { func (op *AgentOsOperator) removeDockerCompose() [][]string {
@@ -602,7 +635,22 @@ func (op *AgentOsOperator) removeDockerCompose() [][]string {
} }
func (op *AgentOsOperator) removeDockerComposeExec() (bool, []string) { func (op *AgentOsOperator) removeDockerComposeExec() (bool, []string) {
return false, nil
commandName := "docker-compose"
if !BasicCommandExists(commandName) {
return true, nil
}
possibleDockerComposeFilePath := []string{
"/usr/local/bin/" + commandName,
"/usr/bin/" + commandName,
}
for _, s := range possibleDockerComposeFilePath {
removeDockerCommand := append(RemoveForcePrefix, s)
AllCommandExecutor(removeDockerCommand)
}
return true, nil
} }
func (op *AgentOsOperator) installDockerCompose() [][]string { func (op *AgentOsOperator) installDockerCompose() [][]string {
@@ -618,7 +666,37 @@ func (op *AgentOsOperator) installDockerCompose() [][]string {
} }
func (op *AgentOsOperator) installDockerComposeExec() (bool, []string) { func (op *AgentOsOperator) installDockerComposeExec() (bool, []string) {
return false, nil
// 安装特定版本的 docker-compose 2.18.0
if op.OssOfflinePrefix == "" {
return false, []string{"离线下载OSS地址不存在 无法安装 docker-compose"}
}
DockerComposeFile := op.OssOfflinePrefix + "docker-compose-linux-x86_64-v2.18.0"
ok, resultLog := AllCommandExecutor([]string{
"wget", DockerComposeFile,
"-O",
"/usr/local/bin/docker-compose",
})
if !ok {
return false, resultLog
}
if !BasicFileExistAndNotNull("/usr/local/bin/docker-compose") {
return false, []string{"docker-compose 下载失败!"}
}
AllCompleteExecutor([][]string{
{
"chmod", "+x", "/usr/local/bin/docker-compose",
},
{
"ln", "-s", "/usr/local/bin/docker-compose", "/usr/bin/docker-compose",
},
})
return true, nil
} }
func (op *AgentOsOperator) installHelm() [][]string { func (op *AgentOsOperator) installHelm() [][]string {
installHelmFunc := [][]string{ installHelmFunc := [][]string{
@@ -670,13 +748,13 @@ func (op *AgentOsOperator) installHelm() [][]string {
{ {
"curl", "curl",
"-o", "-o",
"/usr/share/keyrings/helm.gpg", "/etc/apt/keyrings/helm.gpg",
"https://baltocdn.com/helm/signing.asc", "https://baltocdn.com/helm/signing.asc",
}, },
{ {
"apt-key", "apt-key",
"add", "add",
"/usr/share/keyrings/helm.gpg", "/etc/apt/keyrings/helm.gpg",
}, },
{ {
"add-apt-repository", "add-apt-repository",
@@ -1061,7 +1139,125 @@ func (op *AgentOsOperator) installZSH() [][]string {
} }
func (op *AgentOsOperator) installZSHExec() (bool, []string) { func (op *AgentOsOperator) installZSHExec() (bool, []string) {
return false, nil
ok, resultLog := AllCompleteExecutor([][]string{
{
"mkdir",
"-p",
"/root/wdd/",
},
append(
op.InstallCommandPrefix,
"zsh",
"git",
),
})
if !ok {
return false, resultLog
}
var zshRemoteGitUrl string
if op.IsAgentInnerWall {
zshRemoteGitUrl = "https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh"
} else {
zshRemoteGitUrl = "https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh"
}
resultOk, l := AllCommandExecutor([]string{
"wget",
zshRemoteGitUrl,
"-O",
"/root/wdd/zsh-install.sh",
},
)
if !resultOk {
l = append(l, "zsh-install.sh 下载失败! 安装终止")
return false, l
}
executor, log2 := AllCompleteExecutor([][]string{
{
"chomd",
"+x",
"/root/wdd/zsh-install.sh",
},
{
"/bin/bash",
"/root/wdd/zsh-install.sh",
"REMOTE=https://gitee.com/mirrors/oh-my-zsh.git",
},
},
)
if !executor {
return false, log2
}
modifyZSHOK, log3 := AllCompleteExecutor(
[][]string{
{
"git",
"clone",
"https://github.com.cnpmjs.org/zsh-users/zsh-autosuggestions",
"~/.oh-my-zsh/plugins/zsh-autosuggestions",
},
{
"git",
"clone",
"https://github.com.cnpmjs.org/zsh-users/zsh-syntax-highlighting.git",
"~/.oh-my-zsh/plugins/zsh-syntax-highlighting",
},
{
"wget",
op.OssOfflinePrefix + "oh-my-zsh-plugins-list.txt",
"-O",
"oh-my-zsh-plugins-list.txt",
},
{
"wget",
"-c",
"-i",
"./oh-my-zsh-plugins-list.txt",
"-P",
"~/.oh-my-zsh/plugins/",
},
{
"sed",
"-i",
"s/robbyrussell/agnoster/g",
"~/.zshrc",
},
{
"sed",
"-i",
"s/^# DISABLE_AUTO_UPDATE=\"true\"/DISABLE_AUTO_UPDATE=\"true\"/g",
"~/.zshrc",
},
{
"sed",
"-i",
"s/plugins=(git)/plugins=(git zsh-autosuggestions zsh-syntax-highlighting command-not-found z themes)/g",
"~/.zshrc",
},
{
"source",
"~/.zshrc",
},
{
"chsh",
"-s",
"/bin/zsh",
},
{
"zsh",
},
})
if !modifyZSHOK {
log.Warn("ZSH 安装成功,但是配置修改失败!")
return true, log3
}
return true, nil
} }
func (op *AgentOsOperator) modifySshPort(args []string) [][]string { func (op *AgentOsOperator) modifySshPort(args []string) [][]string {
@@ -1090,5 +1286,5 @@ func (op *AgentOsOperator) ok(args []string) [][]string {
} }
func (op *AgentOsOperator) okExec(args []string) (bool, []string) { func (op *AgentOsOperator) okExec(args []string) (bool, []string) {
return false, nil return true, nil
} }

View File

@@ -2,6 +2,8 @@ package executor
import "os/exec" import "os/exec"
var RemoveForcePrefix = []string{"rm", "-rf"}
// BasicCommandExists 判定命令是否存在 // BasicCommandExists 判定命令是否存在
func BasicCommandExists(commandName string) bool { func BasicCommandExists(commandName string) bool {

View File

@@ -66,6 +66,10 @@ func (l *Logger) Warn(msg string, fields ...zap.Field) {
l.Logger.Warn(msg, fields...) l.Logger.Warn(msg, fields...)
} }
func (l *Logger) WarnF(msg string, args ...interface{}) {
l.Logger.Warn(fmt.Sprintf(msg, args...))
}
// Error logs an error message. // Error logs an error message.
func (l *Logger) ErrorF(msg string, args ...interface{}) { func (l *Logger) ErrorF(msg string, args ...interface{}) {

View File

@@ -2,7 +2,9 @@
##### environment variables ###### ##### environment variables ######
JAVA_OPTS="-Xms128m -Xmx512m -Ddebug=false -Dfile.encoding=utf-8 --spring.profiles.active=k3s --spring.cloud.nacos.config.group=k3s --spring.cloud.nacos.config.server-addr=150.230.198.103:21060 --spring.cloud.nacos.config.extension-configs[0].dataId=common-k3s.yaml --spring.cloud.nacos.config.extension-configs[0].group=k3s"DependLibFiles=( JAVA_OPTS="-Xms128m -Xmx512m -Ddebug=false -Dfile.encoding=utf-8 --spring.profiles.active=k3s --spring.cloud.nacos.config.group=k3s --spring.cloud.nacos.config.server-addr=150.230.198.103:21060 --spring.cloud.nacos.config.extension-configs[0].dataId=common-k3s.yaml --spring.cloud.nacos.config.extension-configs[0].group=k3s"
DependLibFiles=(
wdd-lib-file.sh wdd-lib-file.sh
wdd-lib-log.sh wdd-lib-log.sh
wdd-lib-env.sh wdd-lib-env.sh