[ Agent ] [ Executor ] - 初步完成Executor部分的代码
This commit is contained in:
@@ -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 !")
|
||||||
|
|
||||||
|
|||||||
@@ -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",
|
"curl",
|
||||||
"-o",
|
"-o",
|
||||||
"/usr/share/keyrings/docker-utsc.gpg",
|
dockerGPGFilePath,
|
||||||
"https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg",
|
"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{
|
||||||
|
{
|
||||||
|
"gpg",
|
||||||
|
"--dearmor",
|
||||||
|
"-o",
|
||||||
|
dockerGPGFilePath,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"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",
|
"curl",
|
||||||
"-o",
|
"-o",
|
||||||
"/usr/share/keyrings/docker.gpg",
|
dockerGPGFilePath,
|
||||||
"https://download.docker.com/linux/ubuntu/gpg ",
|
"https://download.docker.com/linux/ubuntu/gpg",
|
||||||
|
})
|
||||||
|
if !ok {
|
||||||
|
return false, l2
|
||||||
|
}
|
||||||
|
if !BasicFileExistAndNotNull(dockerGPGFilePath) {
|
||||||
|
return false, []string{"添加gpg失败!"}
|
||||||
|
}
|
||||||
|
|
||||||
|
resultOk, log2 := AllCompleteExecutor([][]string{
|
||||||
|
{
|
||||||
|
"gpg",
|
||||||
|
"--dearmor",
|
||||||
|
"-o",
|
||||||
|
dockerGPGFilePath,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"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,
|
|
||||||
"docker-ce-cli="+specificDockerVersion,
|
|
||||||
"containerd.io",
|
"containerd.io",
|
||||||
"docker-compose-plugin",
|
"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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|
||||||
|
|||||||
@@ -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{}) {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user