[ Cmii ] [ Octopus ] - fix a lot of bugs

This commit is contained in:
zeaslity
2024-04-08 15:19:15 +08:00
parent fcca3d5275
commit 8e2385e4ac
14 changed files with 270 additions and 75 deletions

View File

@@ -119,15 +119,15 @@ func (op *AgentOsOperator) deployRke(funcArgs []string) (bool, []string) {
// download rke // download rke
// download kubectl // download kubectl
// download rke-cluster.yml // download rke-cluster.yml
ok, resultLog = BasicDownloadFile(op.OssOfflinePrefix+"rke", "/usr/local/bin/rke") ok, resultLog = BasicDownloadFileByCurl(op.OssOfflinePrefix+"rke", "/usr/local/bin/rke")
if !ok { if !ok {
return false, resultLog return false, resultLog
} }
ok, resultLog = BasicDownloadFile(op.OssOfflinePrefix+"kubectl", "/usr/local/bin/kubectl") ok, resultLog = BasicDownloadFileByCurl(op.OssOfflinePrefix+"kubectl", "/usr/local/bin/kubectl")
if !ok { if !ok {
return false, resultLog return false, resultLog
} }
ok, resultLog = BasicDownloadFile(op.OssOfflinePrefix+"rke-cluster-template.yaml", "/root/wdd/cluster.yml") ok, resultLog = BasicDownloadFileByCurl(op.OssOfflinePrefix+"rke-cluster-template.yaml", "/root/wdd/cluster.yml")
if !ok { if !ok {
return false, resultLog return false, resultLog
} }
@@ -182,7 +182,7 @@ func (op *AgentOsOperator) deployK8sDashboard(funcArgs []string) (bool, []string
// download template file // download template file
k8sDashBoardYamlFile := "/root/wdd/install/k8s-dashboard.yaml" k8sDashBoardYamlFile := "/root/wdd/install/k8s-dashboard.yaml"
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+"k8s-dashboard-template.yaml", k8sDashBoardYamlFile) ok, resultLog := BasicDownloadFileByCurl(op.OssOfflinePrefix+"k8s-dashboard-template.yaml", k8sDashBoardYamlFile)
if !ok { if !ok {
return false, resultLog return false, resultLog
} }
@@ -302,7 +302,7 @@ func (op *AgentOsOperator) deployNFS(funcArgs []string) (bool, []string) {
// 下载模板文件 // 下载模板文件
k8sNFSYamlFile := "/root/wdd/install/k8s-nfs.yaml" k8sNFSYamlFile := "/root/wdd/install/k8s-nfs.yaml"
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+nfsTemplateFile, k8sNFSYamlFile) ok, resultLog := BasicDownloadFileByCurl(op.OssOfflinePrefix+nfsTemplateFile, k8sNFSYamlFile)
if !ok { if !ok {
return false, resultLog return false, resultLog
} }
@@ -354,7 +354,7 @@ func (op *AgentOsOperator) deployTestNFS(funcArgs []string) (bool, []string) {
// 下载模板文件 // 下载模板文件
k8sNFSYamlFile := "/root/wdd/install/k8s-nfs-test.json" k8sNFSYamlFile := "/root/wdd/install/k8s-nfs-test.json"
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+nfsTemplateFile, k8sNFSYamlFile) ok, resultLog := BasicDownloadFileByCurl(op.OssOfflinePrefix+nfsTemplateFile, k8sNFSYamlFile)
if !ok { if !ok {
return false, resultLog return false, resultLog
} }
@@ -411,7 +411,7 @@ func (op *AgentOsOperator) deployPVC(funcArgs []string) (bool, []string) {
// 下载模板文件 // 下载模板文件
k8sPvcYamlFile := "/root/wdd/install/k8s-pvc.yaml" k8sPvcYamlFile := "/root/wdd/install/k8s-pvc.yaml"
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+pvcTemplateFile, k8sPvcYamlFile) ok, resultLog := BasicDownloadFileByCurl(op.OssOfflinePrefix+pvcTemplateFile, k8sPvcYamlFile)
if !ok { if !ok {
return false, resultLog return false, resultLog
} }
@@ -468,7 +468,7 @@ func (op *AgentOsOperator) deployMySQL(funcArgs []string) (bool, []string) {
// 下载模板文件 // 下载模板文件
k8sMysqlYamlFile := "/root/wdd/install/k8s-mysql.yaml" k8sMysqlYamlFile := "/root/wdd/install/k8s-mysql.yaml"
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+mysqlTemplate, k8sMysqlYamlFile) ok, resultLog := BasicDownloadFileByCurl(op.OssOfflinePrefix+mysqlTemplate, k8sMysqlYamlFile)
if !ok { if !ok {
return false, resultLog return false, resultLog
} }
@@ -539,7 +539,7 @@ func (op *AgentOsOperator) deployMySQL(funcArgs []string) (bool, []string) {
// BasicCreateFolder(jackeyLoveLocalPrefix) // BasicCreateFolder(jackeyLoveLocalPrefix)
// //
// jackeyLoveFolder := strings.Split(jackeyLove, ".tar")[0] // jackeyLoveFolder := strings.Split(jackeyLove, ".tar")[0]
// ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+jackeyLove, jackeyLoveLocalPrefix+jackeyLove) // ok, resultLog := BasicDownloadFileByCurl(op.OssOfflinePrefix+jackeyLove, jackeyLoveLocalPrefix+jackeyLove)
// if !ok { // if !ok {
// return false, append(resultLog, "[loadMysqlInitScript]- jackeyLove 下载失败!") // return false, append(resultLog, "[loadMysqlInitScript]- jackeyLove 下载失败!")
// } // }
@@ -639,7 +639,7 @@ func (op *AgentOsOperator) deployMiddlewares(funcArgs []string) (bool, []string)
// 下载模板文件 // 下载模板文件
k8sMiddlewaresYamlFile := "/root/wdd/install/k8s-middlewares.yaml" k8sMiddlewaresYamlFile := "/root/wdd/install/k8s-middlewares.yaml"
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+middlewaresTemplate, k8sMiddlewaresYamlFile) ok, resultLog := BasicDownloadFileByCurl(op.OssOfflinePrefix+middlewaresTemplate, k8sMiddlewaresYamlFile)
if !ok { if !ok {
return false, resultLog return false, resultLog
} }
@@ -710,7 +710,7 @@ func (op *AgentOsOperator) deployRedis(funcArgs []string) (bool, []string) {
// 下载模板文件 // 下载模板文件
k8sRedisYamlFile := "/root/wdd/install/k8s-redis.yaml" k8sRedisYamlFile := "/root/wdd/install/k8s-redis.yaml"
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+redisTemplate, k8sRedisYamlFile) ok, resultLog := BasicDownloadFileByCurl(op.OssOfflinePrefix+redisTemplate, k8sRedisYamlFile)
if !ok { if !ok {
return false, resultLog return false, resultLog
} }
@@ -776,7 +776,7 @@ func (op *AgentOsOperator) deployIngress(funcArgs []string) (bool, []string) {
// 下载模板文件 // 下载模板文件
k8sIngressYamlFile := "/root/wdd/install/k8s-ingress.yaml" k8sIngressYamlFile := "/root/wdd/install/k8s-ingress.yaml"
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+ingressTemplate, k8sIngressYamlFile) ok, resultLog := BasicDownloadFileByCurl(op.OssOfflinePrefix+ingressTemplate, k8sIngressYamlFile)
if !ok { if !ok {
return false, resultLog return false, resultLog
} }
@@ -840,7 +840,7 @@ func (op *AgentOsOperator) deployFront(funcArgs []string) (bool, []string) {
// 下载模板文件 // 下载模板文件
k8sFrontYamlFilePath := "/root/wdd/install/k8s-front.yaml" k8sFrontYamlFilePath := "/root/wdd/install/k8s-front.yaml"
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+fontTemplate, k8sFrontYamlFilePath) ok, resultLog := BasicDownloadFileByCurl(op.OssOfflinePrefix+fontTemplate, k8sFrontYamlFilePath)
if !ok { if !ok {
return false, resultLog return false, resultLog
} }
@@ -962,7 +962,7 @@ func (op *AgentOsOperator) deploySRS(funcArgs []string) (bool, []string) {
// 下载模板文件 // 下载模板文件
k8sSRSYamlFilePath := "/root/wdd/install/k8s-srs.yaml" k8sSRSYamlFilePath := "/root/wdd/install/k8s-srs.yaml"
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+srsTemplate, k8sSRSYamlFilePath) ok, resultLog := BasicDownloadFileByCurl(op.OssOfflinePrefix+srsTemplate, k8sSRSYamlFilePath)
if !ok { if !ok {
return false, resultLog return false, resultLog
} }
@@ -1075,7 +1075,7 @@ func (op *AgentOsOperator) deployBackend(funcArgs []string) (bool, []string) {
// 下载模板文件 // 下载模板文件
k8sBackendYamlFilePath := "/root/wdd/install/k8s-backend.yaml" k8sBackendYamlFilePath := "/root/wdd/install/k8s-backend.yaml"
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+backendTemplate, k8sBackendYamlFilePath) ok, resultLog := BasicDownloadFileByCurl(op.OssOfflinePrefix+backendTemplate, k8sBackendYamlFilePath)
if !ok { if !ok {
return false, resultLog return false, resultLog
} }

View File

@@ -367,11 +367,11 @@ func (op *AgentOsOperator) installDefaultSSHKeyExec(funcArgs []string) (bool, []
} }
// download standard private and public key // download standard private and public key
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+"id_ed25519_private_key", "/root/.ssh/id_ed25519") ok, resultLog := BasicDownloadFileByCurl(op.OssOfflinePrefix+"id_ed25519_private_key", "/root/.ssh/id_ed25519")
if !ok { if !ok {
return false, resultLog return false, resultLog
} }
ok, resultLog = BasicDownloadFile(op.OssOfflinePrefix+"id_ed25519_public_key.pub", "/root/.ssh/id_ed25519.pub") ok, resultLog = BasicDownloadFileByCurl(op.OssOfflinePrefix+"id_ed25519_public_key.pub", "/root/.ssh/id_ed25519.pub")
if !ok { if !ok {
return false, resultLog return false, resultLog
} }
@@ -841,7 +841,7 @@ func (op *AgentOsOperator) installDockerOfflineExec(args []string) (bool, []stri
dockerOfflineFileName = "docker-arm64-20.10.15.tgz" dockerOfflineFileName = "docker-arm64-20.10.15.tgz"
} }
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+dockerOfflineFileName, "/root/wdd/"+dockerOfflineFileName) ok, resultLog := BasicDownloadFileByCurl(op.OssOfflinePrefix+dockerOfflineFileName, "/root/wdd/"+dockerOfflineFileName)
if !ok { if !ok {
return false, resultLog return false, resultLog
} }
@@ -864,17 +864,17 @@ func (op *AgentOsOperator) installDockerOfflineExec(args []string) (bool, []stri
} }
// systemd daemonize docker // systemd daemonize docker
downloadOk, log2 := BasicDownloadFile(op.OssOfflinePrefix+"docker-containerd-daemon.service", "/lib/systemd/system/containerd.service") downloadOk, log2 := BasicDownloadFileByCurl(op.OssOfflinePrefix+"docker-containerd-daemon.service", "/lib/systemd/system/containerd.service")
if !downloadOk { if !downloadOk {
return false, append(log2, "[installDockerOfflineExec] - daemon file download error !") return false, append(log2, "[installDockerOfflineExec] - daemon file download error !")
} }
downloadOk, log2 = BasicDownloadFile(op.OssOfflinePrefix+"docker-socket-daemon.service", "/lib/systemd/system/docker.socket") downloadOk, log2 = BasicDownloadFileByCurl(op.OssOfflinePrefix+"docker-socket-daemon.service", "/lib/systemd/system/docker.socket")
if !downloadOk { if !downloadOk {
return false, append(log2, "[installDockerOfflineExec] - daemon file download error !") return false, append(log2, "[installDockerOfflineExec] - daemon file download error !")
} }
downloadOk, log2 = BasicDownloadFile(op.OssOfflinePrefix+"docker-daemon.service", "/lib/systemd/system/docker.service") downloadOk, log2 = BasicDownloadFileByCurl(op.OssOfflinePrefix+"docker-daemon.service", "/lib/systemd/system/docker.service")
if !downloadOk { if !downloadOk {
return false, append(log2, "[installDockerOfflineExec] - daemon file download error !") return false, append(log2, "[installDockerOfflineExec] - daemon file download error !")
} }
@@ -1006,7 +1006,7 @@ func (op *AgentOsOperator) installDockerComposeExec() (bool, []string) {
log.InfoF("需要安装的docker版本为 => %s", DockerComposeFile) log.InfoF("需要安装的docker版本为 => %s", DockerComposeFile)
ok, resultLog := BasicDownloadFile(DockerComposeFile, "/usr/local/bin/docker-compose") ok, resultLog := BasicDownloadFileByCurl(DockerComposeFile, "/usr/local/bin/docker-compose")
if !ok { if !ok {
return false, resultLog return false, resultLog
} }
@@ -1160,7 +1160,7 @@ func (op *AgentOsOperator) modifyDockerConfigExec(args []string) (bool, []string
} }
// download new // download new
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+"docker-daemon-template.json", dockerDaemonFile) ok, resultLog := BasicDownloadFileByCurl(op.OssOfflinePrefix+"docker-daemon-template.json", dockerDaemonFile)
if !ok { if !ok {
return false, append(resultLog, "[modifyDockerConfigExec] - error download docker-daemon-template.json !") return false, append(resultLog, "[modifyDockerConfigExec] - error download docker-daemon-template.json !")
} }
@@ -1247,7 +1247,7 @@ func (op *AgentOsOperator) installNFSOfflineExec() (bool, []string) {
nfsClientOfflinePackageOSSUrl := op.OssOfflinePrefix + nfsClientOfflinePackageName nfsClientOfflinePackageOSSUrl := op.OssOfflinePrefix + nfsClientOfflinePackageName
log.InfoF("[installNFSOfflineExec]- start to download nfs-client offline package from => %s", nfsClientOfflinePackageOSSUrl) log.InfoF("[installNFSOfflineExec]- start to download nfs-client offline package from => %s", nfsClientOfflinePackageOSSUrl)
ok, resultLog := BasicDownloadFile(nfsClientOfflinePackageOSSUrl, "/root/wdd/"+nfsClientOfflinePackageName) ok, resultLog := BasicDownloadFileByCurl(nfsClientOfflinePackageOSSUrl, "/root/wdd/"+nfsClientOfflinePackageName)
if !ok { if !ok {
return false, append(resultLog, "[installNFSOfflineExec]- download nfs-client offline package error !", nfsClientOfflinePackageOSSUrl) return false, append(resultLog, "[installNFSOfflineExec]- download nfs-client offline package error !", nfsClientOfflinePackageOSSUrl)
} }
@@ -1377,7 +1377,7 @@ func (op *AgentOsOperator) installNFSServerOfflineExec() (bool, []string) {
// download from oss // download from oss
nfsServerOfflinePackageOSSUrl := op.OssOfflinePrefix + nfsServerOfflinePackageName nfsServerOfflinePackageOSSUrl := op.OssOfflinePrefix + nfsServerOfflinePackageName
log.InfoF("[installNFSServerOfflineExec]- start to download nfs-server offline package from => %s", nfsServerOfflinePackageOSSUrl) log.InfoF("[installNFSServerOfflineExec]- start to download nfs-server offline package from => %s", nfsServerOfflinePackageOSSUrl)
ok, resultLog := BasicDownloadFile(nfsServerOfflinePackageOSSUrl, "/root/wdd/"+nfsServerOfflinePackageName) ok, resultLog := BasicDownloadFileByCurl(nfsServerOfflinePackageOSSUrl, "/root/wdd/"+nfsServerOfflinePackageName)
if !ok { if !ok {
return false, append(resultLog, "[installNFSServerOfflineExec]- download nfs-server offline package error !", nfsServerOfflinePackageOSSUrl) return false, append(resultLog, "[installNFSServerOfflineExec]- download nfs-server offline package error !", nfsServerOfflinePackageOSSUrl)
} }
@@ -1584,7 +1584,7 @@ func (op *AgentOsOperator) installHarborExec() (bool, []string) {
BasicRemoveFolderComplete("/root/wdd/harbor-offline-installer-v2.9.0.tgz") BasicRemoveFolderComplete("/root/wdd/harbor-offline-installer-v2.9.0.tgz")
BasicRemoveFolderComplete("/root/wdd/harbor") BasicRemoveFolderComplete("/root/wdd/harbor")
downloadOk, l := BasicDownloadFile(harborOfflineFileURL, "/root/wdd/harbor-offline-installer-v2.9.0.tgz") downloadOk, l := BasicDownloadFileByCurl(harborOfflineFileURL, "/root/wdd/harbor-offline-installer-v2.9.0.tgz")
if !downloadOk { if !downloadOk {
return false, append(l, "download harbor offline installer failed!") return false, append(l, "download harbor offline installer failed!")
} }
@@ -2291,7 +2291,7 @@ func (op *AgentOsOperator) installZSHExec() (bool, []string) {
} }
log.InfoF("开始下载zsh的安装脚本 => %s", zshRemoteGitUrl) log.InfoF("开始下载zsh的安装脚本 => %s", zshRemoteGitUrl)
resultOk, l := BasicDownloadFile(zshRemoteGitUrl, "/root/wdd/zsh-install.sh") resultOk, l := BasicDownloadFileByCurl(zshRemoteGitUrl, "/root/wdd/zsh-install.sh")
if !resultOk { if !resultOk {
l = append(l, "zsh-install.sh 下载失败! 安装终止") l = append(l, "zsh-install.sh 下载失败! 安装终止")
return false, l return false, l

View File

@@ -4,7 +4,10 @@ import (
"bufio" "bufio"
"bytes" "bytes"
"fmt" "fmt"
"golang.org/x/net/proxy"
"io" "io"
"net/http"
"net/url"
"os" "os"
"os/exec" "os/exec"
"strings" "strings"
@@ -511,8 +514,75 @@ func BasicConvertBufferToSlice(outputBuffer bytes.Buffer) (resultLog []string) {
} }
// BasicDownloadFile 从目标地址下载文件到目的地,并检测文件是否下载成功 func BasicDownloadFile(downloadUrl string, socksProxyUrl string, proxyUser string, proxyPass string, desFile string) (downloadOk bool, resultLog []string) {
func BasicDownloadFile(downloadUrl, desFile string) (downloadOk bool, resultLog []string) { // 解析下载URL
_, err := url.Parse(downloadUrl)
if err != nil {
resultLog = append(resultLog, "Error parsing download URL: "+err.Error())
return false, resultLog
}
// 创建文件
out, err := os.Create(desFile)
if err != nil {
resultLog = append(resultLog, "Error creating file: "+err.Error())
return false, resultLog
}
defer out.Close()
// 创建HTTP客户端
client := &http.Client{}
// 如果提供了代理URL
if socksProxyUrl != "" {
// 解析代理URL
parsedProxyUrl, err := url.Parse(socksProxyUrl)
if err != nil {
resultLog = append(resultLog, "Error parsing proxy URL: "+err.Error())
return false, resultLog
}
// 使用SOCKS5代理
auth := &proxy.Auth{User: proxyUser, Password: proxyPass}
dialer, err := proxy.SOCKS5("tcp", parsedProxyUrl.Host, auth, proxy.Direct)
if err != nil {
resultLog = append(resultLog, "Error creating SOCKS5 dialer: "+err.Error())
return false, resultLog
}
// 设置HTTP和HTTPS代理
httpTransport := &http.Transport{
Dial: dialer.Dial,
}
client.Transport = httpTransport
}
// 发送HTTP GET请求
resp, err := client.Get(downloadUrl)
if err != nil {
resultLog = append(resultLog, "Error making GET request: "+err.Error())
return false, resultLog
}
defer resp.Body.Close()
// 检查HTTP响应状态码
if resp.StatusCode != http.StatusOK {
resultLog = append(resultLog, "Server returned HTTP status "+resp.Status)
return false, resultLog
}
// 将HTTP响应内容写入文件
_, err = io.Copy(out, resp.Body)
if err != nil {
resultLog = append(resultLog, "Error writing to file: "+err.Error())
return false, resultLog
}
return true, resultLog
}
// BasicDownloadFileByCurl 从目标地址下载文件到目的地,并检测文件是否下载成功
func BasicDownloadFileByCurl(downloadUrl, desFile string) (downloadOk bool, resultLog []string) {
// wget or curl download // wget or curl download
var ok bool var ok bool
@@ -539,14 +609,14 @@ func BasicDownloadFile(downloadUrl, desFile string) (downloadOk bool, resultLog
}) })
} else { } else {
sprintf := fmt.Sprintf("[BasicDownloadFile] - neither wget or curl exists ! can't download file [ %s ] from [ %s ]", desFile, downloadUrl) sprintf := fmt.Sprintf("[BasicDownloadFileByCurl] - neither wget or curl exists ! can't download file [ %s ] from [ %s ]", desFile, downloadUrl)
log.Error(sprintf) log.Error(sprintf)
return false, []string{ return false, []string{
sprintf, sprintf,
} }
} }
errLog := fmt.Sprintf("[BasicDownloadFile] - download file [ %s ] from [ %s ] failed !", desFile, downloadUrl) errLog := fmt.Sprintf("[BasicDownloadFileByCurl] - download file [ %s ] from [ %s ] failed !", desFile, downloadUrl)
if !ok { if !ok {
log.Error(errLog) log.Error(errLog)
return false, []string{ return false, []string{
@@ -558,7 +628,7 @@ func BasicDownloadFile(downloadUrl, desFile string) (downloadOk bool, resultLog
if !existAndNotNull { if !existAndNotNull {
return false, []string{ return false, []string{
errLog, errLog,
"[BasicDownloadFile] - file not exist !", "[BasicDownloadFileByCurl] - file not exist !",
} }
} }
@@ -598,7 +668,7 @@ func BasicDownloadFileWithProxy(downloadUrl, proxyUrl, desFile string) (download
if !existAndNotNull { if !existAndNotNull {
return false, []string{ return false, []string{
errLog, errLog,
"[BasicDownloadFile] - file not exist !", "[BasicDownloadFileByCurl] - file not exist !",
} }
} }

View File

@@ -6,6 +6,8 @@ import (
) )
var LocalGzipImageFolderPrefix = "/var/lib/docker/image_sync/" var LocalGzipImageFolderPrefix = "/var/lib/docker/image_sync/"
var DefaultSocks5ProxyUser = "zeaslity"
var DefaultSocks5ProxyPass = "password"
func (op *AgentOsOperator) Sync(baseFuncName string, funcArgs ...string) (bool, []string) { func (op *AgentOsOperator) Sync(baseFuncName string, funcArgs ...string) (bool, []string) {
resultOk := false resultOk := false
@@ -185,14 +187,15 @@ func (op *AgentOsOperator) downloadGzipImageFile(funcArgs []string) (bool, []str
} }
} }
var download bool //var download bool
var downloadLog []string //var downloadLog []string
if proxyUrl == "" { //if proxyUrl == "" {
download, downloadLog = BasicDownloadFile(ossUrlPrefix+gzipImageFromFullName, desFile) // download, downloadLog = BasicDownloadFileByCurl(ossUrlPrefix+gzipImageFromFullName, desFile)
} else { //} else {
download, downloadLog = BasicDownloadFileWithProxy(ossUrlPrefix+gzipImageFromFullName, proxyUrl, desFile) // = BasicDownloadFileWithProxy(ossUrlPrefix+gzipImageFromFullName, proxyUrl, desFile)
} //}
download, downloadLog := BasicDownloadFile(ossUrlPrefix+gzipImageFromFullName, proxyUrl, DefaultSocks5ProxyUser, DefaultSocks5ProxyPass, desFile)
if !download { if !download {
return false, downloadLog return false, downloadLog
} }
@@ -269,7 +272,7 @@ func (op *AgentOsOperator) pushImageToTargetHarbor(funcArgs []string) (bool, []s
} }
func (op *AgentOsOperator) updateImageTag(funcArgs []string) (bool, []string) { func (op *AgentOsOperator) updateImageTag(funcArgs []string) (bool, []string) {
namespace := funcArgs[6] namespace := funcArgs[6]
targetImageFullName := funcArgs[7] //targetImageFullName := funcArgs[7]
proxyUrl := funcArgs[4] proxyUrl := funcArgs[4]
if !BasicCommandExistByPath("kubectl") { if !BasicCommandExistByPath("kubectl") {
return false, []string{ return false, []string{
@@ -291,28 +294,26 @@ func (op *AgentOsOperator) updateImageTag(funcArgs []string) (bool, []string) {
updateFileName := "update-app-tag.sh" updateFileName := "update-app-tag.sh"
if !BasicFileExistAndNotNull(folderPrefix + updateFileName) { if !BasicFileExistAndNotNull(folderPrefix + updateFileName) {
// kubectl update tag file not exits! // kubectl update tag file not exits!
var download bool download, downloadLog := BasicDownloadFile(AgentOsOperatorCache.OssOfflinePrefix+updateFileName, proxyUrl, DefaultSocks5ProxyUser, DefaultSocks5ProxyPass, folderPrefix+updateFileName)
var downloadLog []string
if proxyUrl == "" {
download, downloadLog = BasicDownloadFile(AgentOsOperatorCache.OssOfflinePrefix+updateFileName, folderPrefix+updateFileName)
} else {
download, downloadLog = BasicDownloadFileWithProxy(AgentOsOperatorCache.OssOfflinePrefix+updateFileName, proxyUrl, folderPrefix+updateFileName)
}
if !download { if !download {
return false, downloadLog return false, downloadLog
} }
} }
updateCommand := "kubectl -n " + namespace + " patch deployment " + appName + "-p \"{\"spec\":{\"template\":{\"spec\":{\"containers\":[{\"name\": " + appName + ",\"image\": " + targetImageFullName + "}]}}}}" PureResultSingleExecute([]string{
"chomd",
"+x",
folderPrefix + updateFileName,
})
newTag := image.ImageFullNameToImageTag(imageFullName)
log.InfoF("start do update %s %s to %s", namespace, appName, newTag)
updateCommand := "bash " + folderPrefix + updateFileName + namespace + appName + newTag
executor, i := HardCodeCommandExecutor(updateCommand) executor, i := HardCodeCommandExecutor(updateCommand)
if !executor { if !executor {
return false, i return false, i
} }
return true, nil return true, i
} }
//func BuildGzipImageFromFullName(imageFullName string) string {
//
//}

View File

@@ -6,6 +6,7 @@ import (
"github.com/spf13/viper" "github.com/spf13/viper"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
"io/ioutil" "io/ioutil"
"math/rand"
"reflect" "reflect"
"strings" "strings"
"time" "time"
@@ -66,11 +67,13 @@ func INIT(octopusAgentConfigFileName string, agentServerInfoConf string) chan bo
case initFromServerMsg := <-initFromServerQueue.ReceiveChan.InitRChan: case initFromServerMsg := <-initFromServerQueue.ReceiveChan.InitRChan:
if handleInitMsgFromServer(initFromServerMsg, initToServerQueue, agentServerInfo) { if handleInitMsgFromServer(initFromServerMsg, initToServerQueue, agentServerInfo) {
log.InfoF("[INIT] - agent has registered !") log.InfoF("[INIT] - agent has registered !")
// 手动关闭 注册队列的连接
shutdownRegisterQueueConnection(initFromServerQueue, initToServerQueue)
break break
} }
default: default:
log.Debug("agent init not received from server ! start to waiting !") log.Debug("agent init not received from server ! start to waiting !")
time.Sleep(time.Second * 10) time.Sleep(time.Millisecond * 500)
} }
} }
@@ -192,7 +195,11 @@ func buildAndSendInitMsgToServer(agentServerInfo *a_agent.AgentServerInfo, initT
_ = P.Submit( _ = P.Submit(
func() { func() {
agentRegisterCount := 0 agentRegisterCount := 0
for g.G.AgentHasRegister == false && agentRegisterCount < g.AgentRegisterFailedCount { for g.G.AgentHasRegister == false {
if agentRegisterCount > g.AgentRegisterFailedCount {
log.ErrorF("Agent Register Failed after %d times tryings !", g.AgentRegisterFailedCount)
return
}
log.InfoF("[INIT] - Send init message to server! ==> %s", octopusMsg) log.InfoF("[INIT] - Send init message to server! ==> %s", octopusMsg)
@@ -263,9 +270,6 @@ func handleInitMsgFromServer(initFromServerMsg *rabbitmq.OctopusMessage, initToS
// 保存真实的AgentTopicName // 保存真实的AgentTopicName
a_agent.AgentServerInfoCache.TopicName = serverInfo.TopicName a_agent.AgentServerInfoCache.TopicName = serverInfo.TopicName
// 手动关闭 注册队列的连接
//shutdownRegisterQueueConnection(initFromServerQueue, initToServerQueue)
} else { } else {
// 不是自身的 注册回复信息 -- 拒绝 2023年6月19日 此处存在错误! 会死循环Nack 导致异常 // 不是自身的 注册回复信息 -- 拒绝 2023年6月19日 此处存在错误! 会死循环Nack 导致异常
log.WarnF("OctopusMessage INIT from server not this agent ! => %v ", &initFromServerMsg) log.WarnF("OctopusMessage INIT from server not this agent ! => %v ", &initFromServerMsg)
@@ -273,9 +277,13 @@ func handleInitMsgFromServer(initFromServerMsg *rabbitmq.OctopusMessage, initToS
// 需要休眠等待不再获取相应的信息 // 需要休眠等待不再获取相应的信息
_ = P.Submit(func() { _ = P.Submit(func() {
time.Sleep(time.Second * 5) // 生成一个1到5之间的随机整数
seconds := rand.Intn(5) + 1
initToServerQueue.SendOMsg(initFromServerMsg) initToServerQueue.SendOMsg(initFromServerMsg)
// 谦让型 多并发模型 等待其他Agent注册成功
time.Sleep(time.Duration(seconds) * time.Second)
}) })
} }
@@ -286,10 +294,10 @@ func handleInitMsgFromServer(initFromServerMsg *rabbitmq.OctopusMessage, initToS
// shutdownRegisterQueueConnection 关闭初始化连接的两个队列 // shutdownRegisterQueueConnection 关闭初始化连接的两个队列
func shutdownRegisterQueueConnection(initFromServerQueue *rabbitmq.RabbitQueue, initToServerQueue *rabbitmq.RabbitQueue) { func shutdownRegisterQueueConnection(initFromServerQueue *rabbitmq.RabbitQueue, initToServerQueue *rabbitmq.RabbitQueue) {
initFromServerQueue.Close() _ = initFromServerQueue.Close()
initToServerQueue.Close() _ = initToServerQueue.Close()
log.InfoF("Pretend to Shutdown register queue connection !") log.InfoF("Octopus Agent Init Queue has disconnected!")
} }
func parseAgentServerInfo(agentServerInfoConf string) *a_agent.AgentServerInfo { func parseAgentServerInfo(agentServerInfoConf string) *a_agent.AgentServerInfo {

View File

@@ -8,6 +8,7 @@ require (
github.com/shirou/gopsutil/v3 v3.23.3 github.com/shirou/gopsutil/v3 v3.23.3
github.com/spf13/viper v1.15.0 github.com/spf13/viper v1.15.0
github.com/streadway/amqp v1.1.0 github.com/streadway/amqp v1.1.0
golang.org/x/net v0.24.0
gopkg.in/yaml.v3 v3.0.1 gopkg.in/yaml.v3 v3.0.1
wdd.io/agent-common v0.0.0 wdd.io/agent-common v0.0.0
) )
@@ -58,7 +59,7 @@ require (
go.opentelemetry.io/otel/trace v1.14.0 // indirect go.opentelemetry.io/otel/trace v1.14.0 // indirect
go.uber.org/multierr v1.10.0 // indirect go.uber.org/multierr v1.10.0 // indirect
go.uber.org/zap v1.27.0 // indirect go.uber.org/zap v1.27.0 // indirect
golang.org/x/sys v0.15.0 // indirect golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect golang.org/x/text v0.14.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect

View File

@@ -438,6 +438,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -510,8 +512,8 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=

View File

@@ -0,0 +1,20 @@
#!/bin/bash
# 设置local和tc-sh的别名
set_minio_endpoint_alias() {
mc alias set local http://localhost:9000 cmii B#923fC7mk
mc alias set tc-sh http://42.192.52.227:9000/ cmii B#923fC7mk
}
create_bucket_in_tc_sh() {
mc mb tc-sh/octopus
mc anonymous set public tc-sh/octopus
}
delete_prune_tc_sh_bucket() {
mc rm --recursive --force tc-sh/octopus/
}
set_minio_endpoint_alias
mc cp -r local/octopus/ tc-sh/octopus/

View File

@@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
# should upload to Octopus OSS
# Check if the correct number of arguments are provided # Check if the correct number of arguments are provided
if [ "$#" -ne 3 ]; then if [ "$#" -ne 3 ]; then
echo "Usage: $0 <name_space> <deployment_name> <new_tag>" echo "Usage: $0 <name_space> <deployment_name> <new_tag>"
@@ -23,9 +25,7 @@ old_tag=${old_tag#*:}
# echo "old_tag is ${old_tag}" # echo "old_tag is ${old_tag}"
# echo "image prefix is => ${image_prefix}" # echo "image prefix is => ${image_prefix}"
kubectl -n "${name_space}" patch deployment "${deployment_name}" -p "{\"spec\":{\"template\":{\"spec\":{\"containers\":[{\"name\":\"${deployment_name}\",\"image\": \"${image_prefix}:${new_tag}\"}]}}}}" >>/dev/null
kubectl -n "${name_space}" patch deployment "${deployment_name}" -p "{\"spec\":{\"template\":{\"spec\":{\"containers\":[{\"name\":\"${deployment_name}\",\"image\": \"${image_prefix}:${new_tag}\"}]}}}}" >> /dev/null
real_new_tag=$(kubectl -n "${name_space}" get deployment "${deployment_name}" -o=jsonpath='{.spec.template.spec.containers[*].image}' | grep -oE ':[0-9]+\.[0-9]+\.[0-9]+.*') real_new_tag=$(kubectl -n "${name_space}" get deployment "${deployment_name}" -o=jsonpath='{.spec.template.spec.containers[*].image}' | grep -oE ':[0-9]+\.[0-9]+\.[0-9]+.*')
real_new_tag=${real_new_tag#*:} real_new_tag=${real_new_tag#*:}

View File

@@ -1 +1,90 @@
package main package main
import (
"io"
"net/http"
"net/url"
"os"
)
func BasicDownloadFileHTTP(downloadUrl string, proxyUrl string, proxyUser string, proxyPass string, desFile string) (downloadOk bool, resultLog []string) {
// 解析下载URL
_, err := url.Parse(downloadUrl)
if err != nil {
resultLog = append(resultLog, "Error parsing download URL: "+err.Error())
return false, resultLog
}
// 创建文件
out, err := os.Create(desFile)
if err != nil {
resultLog = append(resultLog, "Error creating file: "+err.Error())
return false, resultLog
}
defer out.Close()
// 创建HTTP客户端
client := &http.Client{}
// 如果提供了代理URL
if proxyUrl != "" {
// 解析代理URL
proxyURL, err := url.Parse(proxyUrl)
if err != nil {
resultLog = append(resultLog, "Error parsing proxy URL: "+err.Error())
return false, resultLog
}
// 设置HTTP代理
transport := &http.Transport{
Proxy: func(req *http.Request) (*url.URL, error) {
req.SetBasicAuth(proxyUser, proxyPass)
return proxyURL, nil
},
}
client.Transport = transport
}
// 发送HTTP GET请求
resp, err := client.Get(downloadUrl)
if err != nil {
resultLog = append(resultLog, "Error making GET request: "+err.Error())
return false, resultLog
}
defer resp.Body.Close()
// 检查HTTP响应状态码
if resp.StatusCode != http.StatusOK {
resultLog = append(resultLog, "Server returned HTTP status "+resp.Status)
return false, resultLog
}
// 将HTTP响应内容写入文件
_, err = io.Copy(out, resp.Body)
if err != nil {
resultLog = append(resultLog, "Error writing to file: "+err.Error())
return false, resultLog
}
return true, resultLog
}
func main() {
//socksProxyUrl := "socks5://192.168.35.71:22888"
httpProxyUrl := "http://192.168.35.71:22808"
downloadOk, resultLog := BasicDownloadFileHTTP(
"https://happybirthday.107421.xyz/octopus-agent/octopus-agent_linux_amd64_2024-03-29-17-47-14",
httpProxyUrl,
"zeaslity",
"password",
"octopus-agent_linux_1232",
)
if downloadOk {
println("File downloaded successfully")
} else {
for _, log := range resultLog {
println(log)
}
}
}

View File

@@ -62,6 +62,8 @@ public class AcceptAgentInitInfo {
; ;
put("Ziyang", put("Ziyang",
11); 11);
put("JiLin",
12);
}}; }};

View File

@@ -61,7 +61,7 @@ public class OMessageToAgentSender {
public void send(OctopusMessage octopusMessage) { public void send(OctopusMessage octopusMessage) {
log.info( log.info(
"OM Sender to {} Time {} \n OctopusMessageType为 {}\nFunctionContent为 {}", "OM Sender to {} Time {} OctopusMessageType为 {} FunctionContent为 {}",
octopusMessage.getUuid(), octopusMessage.getUuid(),
octopusMessage.getInit_time(), octopusMessage.getInit_time(),
octopusMessage.getOctopusMessageType(), octopusMessage.getOctopusMessageType(),

View File

@@ -48,7 +48,7 @@ public class TestBaseFuncScheduler {
// Long projectServerId = 1722453318596550657L;// lappro // Long projectServerId = 1722453318596550657L;// lappro
// Long projectServerId = 1752602668144975873L;// cqlyj // Long projectServerId = 1752602668144975873L;// cqlyj
// Long projectServerId = 1764575895186030593L;// 上海雷视联动 // Long projectServerId = 1764575895186030593L;// 上海雷视联动
// Long projectServerId = 1765290465066692610L;// 吉林移动 // Long projectServerId = 1777152043483353089L;// 吉林移动
// Long projectServerId = 1765654823726669826L;// 资阳公安 // Long projectServerId = 1765654823726669826L;// 资阳公安
Long projectServerId = 1773619219367120898L; // 内网35-71项目 Long projectServerId = 1773619219367120898L; // 内网35-71项目
@@ -58,7 +58,7 @@ public class TestBaseFuncScheduler {
// String masterNodeServerName = "Shanghai-amd64-09"; // cgga // String masterNodeServerName = "Shanghai-amd64-09"; // cgga
// String masterNodeServerName = "Chengdu-amd64-51"; // 吉林移动 // String masterNodeServerName = "Chengdu-amd64-51"; // 吉林移动
String masterNodeServerName = "Chengdu-amd64-71"; // 吉林移动 String masterNodeServerName = "JiLin-amd64-01"; // 吉林移动
// String masterNodeServerName = "Ziyang-amd64-61"; // 资阳公安 // String masterNodeServerName = "Ziyang-amd64-61"; // 资阳公安
ProjectServerVO projectServerVO = coreProjectServerService.projectServerOne(projectServerId); ProjectServerVO projectServerVO = coreProjectServerService.projectServerOne(projectServerId);

View File

@@ -38,17 +38,19 @@ public class TestImageSyncScheduler {
public void runImageSync() { public void runImageSync() {
ArrayList<String> CmiiAppNameList = new ArrayList<>(List.of( ArrayList<String> CmiiAppNameList = new ArrayList<>(List.of(
"cmii-uav-process:5.4.0-040701" // "cmii-uav-process:5.4.0-040701"
)); ));
ArrayList<String> ImageFullNameList = new ArrayList<>(List.of( ArrayList<String> ImageFullNameList = new ArrayList<>(List.of(
// "harbor.cdcyy.com.cn/cmii/cmii-uav-industrial-portfolio:5.4.0-cqly-032802" "harbor.cdcyy.com.cn/cmii/cmii-live-operator:5.2.0",
"harbor.cdcyy.com.cn/cmii/cmii-srs-oss-adaptor:2023-SA"
)); ));
Boolean downloadAndCompressOnly = false; Boolean downloadAndCompressOnly = false;
// String projectNamespace = "wdd"; // wdd // String projectNamespace = "wdd"; // wdd
String projectNamespace = "cqlyj"; // cqlyj // String projectNamespace = "cqlyj"; // cqlyj
String projectNamespace = "jlyd"; // jlyd
// String innerWorkerAgentName = "Chengdu-amd64-65-lapwdd"; //wdd // String innerWorkerAgentName = "Chengdu-amd64-65-lapwdd"; //wdd
String innerWorkerAgentName = "Chengdu-amd64-71-3571gd"; //prod String innerWorkerAgentName = "Chengdu-amd64-71-3571gd"; //prod