[ Agent ] [ App ] - ingress front backend srs
This commit is contained in:
@@ -3,12 +3,9 @@ package executor
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
"regexp"
|
"regexp"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -59,9 +56,9 @@ func (op *AgentOsOperator) Deploy(appFuncName string, funcArgs ...string) (bool,
|
|||||||
case "DEPLOY_K8S_MYSQL":
|
case "DEPLOY_K8S_MYSQL":
|
||||||
resultOK, result = op.deployMySQL(funcArgs)
|
resultOK, result = op.deployMySQL(funcArgs)
|
||||||
break
|
break
|
||||||
case "LOAD_MYSQL_INIT_SCRIPT":
|
//case "LOAD_MYSQL_INIT_SCRIPT":
|
||||||
resultOK, result = op.loadMysqlInitScript(funcArgs)
|
// resultOK, result = op.loadMysqlInitScript(funcArgs)
|
||||||
break
|
// break
|
||||||
case "checkMySQL":
|
case "checkMySQL":
|
||||||
resultOK, result = op.checkMySQL(funcArgs)
|
resultOK, result = op.checkMySQL(funcArgs)
|
||||||
break
|
break
|
||||||
@@ -499,95 +496,95 @@ func (op *AgentOsOperator) deployMySQL(funcArgs []string) (bool, []string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (op *AgentOsOperator) loadMysqlInitScript(funcArgs []string) (bool, []string) {
|
//func (op *AgentOsOperator) loadMysqlInitScript(funcArgs []string) (bool, []string) {
|
||||||
|
//
|
||||||
folder, i := CheckAppInstallFolder()
|
// folder, i := CheckAppInstallFolder()
|
||||||
if !folder {
|
// if !folder {
|
||||||
return false, i
|
// return false, i
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// download offline sql list
|
// // download offline sql list
|
||||||
if len(funcArgs) <= 7 {
|
// if len(funcArgs) <= 7 {
|
||||||
return false, []string{
|
// return false, []string{
|
||||||
"[loadMysqlInitScript]- MySQL初始化参数有误! 无法进行初始化",
|
// "[loadMysqlInitScript]- MySQL初始化参数有误! 无法进行初始化",
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
jackeyLove := funcArgs[7]
|
// jackeyLove := funcArgs[7]
|
||||||
if !strings.HasSuffix(jackeyLove, "tar") {
|
// if !strings.HasSuffix(jackeyLove, "tar") {
|
||||||
return false, []string{
|
// return false, []string{
|
||||||
"[loadMysqlInitScript]- jackeyLove 有误!",
|
// "[loadMysqlInitScript]- jackeyLove 有误!",
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
log.DebugF("[loadMysqlInitScript] - start to load jackeyLove file from %s", jackeyLove)
|
// log.DebugF("[loadMysqlInitScript] - start to load jackeyLove file from %s", jackeyLove)
|
||||||
|
//
|
||||||
jackeyLoveLocalPrefix := "/root/wdd/jackeylove/"
|
// jackeyLoveLocalPrefix := "/root/wdd/jackeylove/"
|
||||||
PureResultSingleExecute([]string{
|
// PureResultSingleExecute([]string{
|
||||||
"rm",
|
// "rm",
|
||||||
"-f",
|
// "-f",
|
||||||
jackeyLoveLocalPrefix,
|
// jackeyLoveLocalPrefix,
|
||||||
})
|
// })
|
||||||
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 := BasicDownloadFile(op.OssOfflinePrefix+jackeyLove, jackeyLoveLocalPrefix+jackeyLove)
|
||||||
if !ok {
|
// if !ok {
|
||||||
return false, append(resultLog, "[loadMysqlInitScript]- jackeyLove 下载失败!")
|
// return false, append(resultLog, "[loadMysqlInitScript]- jackeyLove 下载失败!")
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// unzip
|
// // unzip
|
||||||
if !PureResultSingleExecute([]string{
|
// if !PureResultSingleExecute([]string{
|
||||||
"tar",
|
// "tar",
|
||||||
"-vxf",
|
// "-vxf",
|
||||||
jackeyLoveLocalPrefix + jackeyLove,
|
// jackeyLoveLocalPrefix + jackeyLove,
|
||||||
"-C",
|
// "-C",
|
||||||
jackeyLoveLocalPrefix,
|
// jackeyLoveLocalPrefix,
|
||||||
}) {
|
// }) {
|
||||||
return false, []string{
|
// return false, []string{
|
||||||
"[loadMysqlInitScript]- jackeyLove unzip error !",
|
// "[loadMysqlInitScript]- jackeyLove unzip error !",
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// list all sql file and sort and convert to []string
|
// // list all sql file and sort and convert to []string
|
||||||
files, err := os.ReadDir(jackeyLoveLocalPrefix + jackeyLoveFolder)
|
// files, err := os.ReadDir(jackeyLoveLocalPrefix + jackeyLoveFolder)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return false, []string{
|
// return false, []string{
|
||||||
"[loadMysqlInitScript]- read unzipped jackeylove error !",
|
// "[loadMysqlInitScript]- read unzipped jackeylove error !",
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
var jackeyLoveFileList []string
|
// var jackeyLoveFileList []string
|
||||||
for _, file := range files {
|
// for _, file := range files {
|
||||||
if !file.IsDir() && filepath.Ext(file.Name()) == ".sql" {
|
// if !file.IsDir() && filepath.Ext(file.Name()) == ".sql" {
|
||||||
jackeyLoveFileList = append(jackeyLoveFileList, file.Name())
|
// jackeyLoveFileList = append(jackeyLoveFileList, file.Name())
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// sort for numeric order
|
// // sort for numeric order
|
||||||
sortFileNames(jackeyLoveFileList)
|
// sortFileNames(jackeyLoveFileList)
|
||||||
var jackeyLoveFileAbsolutePath []string
|
// var jackeyLoveFileAbsolutePath []string
|
||||||
for _, jackeyLoveFile := range jackeyLoveFileList {
|
// for _, jackeyLoveFile := range jackeyLoveFileList {
|
||||||
jackeyLoveFileAbsolutePath = append(jackeyLoveFileAbsolutePath, jackeyLoveLocalPrefix+jackeyLoveFolder+string(os.PathSeparator)+jackeyLoveFile)
|
// jackeyLoveFileAbsolutePath = append(jackeyLoveFileAbsolutePath, jackeyLoveLocalPrefix+jackeyLoveFolder+string(os.PathSeparator)+jackeyLoveFile)
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
log.InfoF("[loadMysqlInitScript] - all jackey love files are => %v", jackeyLoveFileAbsolutePath)
|
// log.InfoF("[loadMysqlInitScript] - all jackey love files are => %v", jackeyLoveFileAbsolutePath)
|
||||||
|
//
|
||||||
// dispatch mysql execution command
|
// // dispatch mysql execution command
|
||||||
jackeyLoveIP := funcArgs[0]
|
// jackeyLoveIP := funcArgs[0]
|
||||||
parseIP := net.ParseIP(jackeyLoveIP)
|
// parseIP := net.ParseIP(jackeyLoveIP)
|
||||||
if parseIP == nil {
|
// if parseIP == nil {
|
||||||
return false, []string{
|
// return false, []string{
|
||||||
"[loadMysqlInitScript]- ip config error !",
|
// "[loadMysqlInitScript]- ip config error !",
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
load, result := MysqlSqlFileLoad(jackeyLoveIP, jackeyLoveFileAbsolutePath)
|
// load, result := MysqlSqlFileLoad(jackeyLoveIP, jackeyLoveFileAbsolutePath)
|
||||||
if !load {
|
// if !load {
|
||||||
return false, result
|
// return false, result
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
return true, append(jackeyLoveFileAbsolutePath, "[loadMysqlInitScript] - execute success !")
|
// return true, append(jackeyLoveFileAbsolutePath, "[loadMysqlInitScript] - execute success !")
|
||||||
|
//
|
||||||
}
|
//}
|
||||||
|
|
||||||
func sortFileNames(fileNames []string) {
|
func sortFileNames(fileNames []string) {
|
||||||
re := regexp.MustCompile(`(\d+)_`)
|
re := regexp.MustCompile(`(\d+)_`)
|
||||||
@@ -741,6 +738,8 @@ func (op *AgentOsOperator) deployRedis(funcArgs []string) (bool, []string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// todo should I check ingress exists ?
|
||||||
|
|
||||||
// 成功启动
|
// 成功启动
|
||||||
return true, []string{
|
return true, []string{
|
||||||
"Redis 部署成功!",
|
"Redis 部署成功!",
|
||||||
@@ -750,15 +749,12 @@ func (op *AgentOsOperator) deployRedis(funcArgs []string) (bool, []string) {
|
|||||||
|
|
||||||
func (op *AgentOsOperator) deployIngress(funcArgs []string) (bool, []string) {
|
func (op *AgentOsOperator) deployIngress(funcArgs []string) (bool, []string) {
|
||||||
|
|
||||||
ingressTemplate := "ingress-template.yaml"
|
ingressTemplate := "k8s-ingress-template.yaml"
|
||||||
result := append(AppExecuteErrorLogPrefix, "部署 Ingress !")
|
result := append(AppExecuteErrorLogPrefix, "部署 Ingress !")
|
||||||
|
|
||||||
// 环境判定
|
// 环境判定
|
||||||
commandExist, commandName := BasicCommandExistsBatch([]string{
|
if !BasicCommandExistByPath("kubectl") {
|
||||||
"kubectl",
|
result = append(result, "命令不存在", "kubectl")
|
||||||
})
|
|
||||||
if !commandExist {
|
|
||||||
result = append(result, "命令不存在", commandName)
|
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
folder, i := CheckAppInstallFolder()
|
folder, i := CheckAppInstallFolder()
|
||||||
@@ -767,37 +763,38 @@ func (op *AgentOsOperator) deployIngress(funcArgs []string) (bool, []string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 下载模板文件
|
// 下载模板文件
|
||||||
if !PureResultSingleExecute([]string{
|
k8sIngressYamlFile := "/root/wdd/install/k8s-ingress.yaml"
|
||||||
"wget",
|
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+ingressTemplate, k8sIngressYamlFile)
|
||||||
"-q",
|
if !ok {
|
||||||
op.OssOfflinePrefix + "/" + ingressTemplate,
|
return false, resultLog
|
||||||
}) {
|
|
||||||
result = append(result, "下载模板文件")
|
|
||||||
return false, result
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 根据参数 A1C2IP 替换
|
// 根据参数 A1C2IP 替换
|
||||||
if !BasicReplace(ingressTemplate, "SUPREME", funcArgs[0]) {
|
parseIP := net.ParseIP(funcArgs[0])
|
||||||
result = append(result, "替换SUPREME信息")
|
if parseIP == nil {
|
||||||
return false, result
|
return false, append(result, "ip args error !")
|
||||||
}
|
}
|
||||||
if !BasicReplace(ingressTemplate, "A1C2IP", funcArgs[1]) {
|
if !BasicReplace(k8sIngressYamlFile, "A1C2IP", funcArgs[0]) {
|
||||||
result = append(result, "替换A1C2IP信息")
|
result = append(result, "替换A1C2IP信息")
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
if !BasicReplace(ingressTemplate, "A1C1JS", funcArgs[1]) {
|
if !BasicReplace(k8sIngressYamlFile, "SUPREME", funcArgs[1]) {
|
||||||
|
result = append(result, "替换SUPREME信息")
|
||||||
|
return false, result
|
||||||
|
}
|
||||||
|
if !BasicReplace(k8sIngressYamlFile, "A1C1JS", funcArgs[4]) {
|
||||||
result = append(result, "替换A1C1JS信息")
|
result = append(result, "替换A1C1JS信息")
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
|
if !BasicReplace(k8sIngressYamlFile, "KIMMY", funcArgs[6]) {
|
||||||
|
result = append(result, "替换KIMMY信息")
|
||||||
|
return false, result
|
||||||
|
}
|
||||||
|
|
||||||
// 启动服务
|
// 启动服务
|
||||||
if !PureResultSingleExecute([]string{
|
exec, strings := KubectlApplyExec(k8sIngressYamlFile)
|
||||||
"kubectl",
|
if !exec {
|
||||||
"apply",
|
return false, append(result, strings...)
|
||||||
"-f",
|
|
||||||
ingressTemplate,
|
|
||||||
}) {
|
|
||||||
result = append(result, "创建 Ingress 失败!")
|
|
||||||
return false, result
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 成功启动
|
// 成功启动
|
||||||
@@ -808,15 +805,12 @@ func (op *AgentOsOperator) deployIngress(funcArgs []string) (bool, []string) {
|
|||||||
|
|
||||||
func (op *AgentOsOperator) deployFront(funcArgs []string) (bool, []string) {
|
func (op *AgentOsOperator) deployFront(funcArgs []string) (bool, []string) {
|
||||||
|
|
||||||
fontTemplate := "front-template.yaml"
|
fontTemplate := "k8s-front-template.yaml"
|
||||||
result := append(AppExecuteErrorLogPrefix, "部署 前端服务 !")
|
result := append(AppExecuteErrorLogPrefix, "部署 前端服务 !")
|
||||||
|
|
||||||
// 环境判定
|
// 环境判定
|
||||||
commandExist, commandName := BasicCommandExistsBatch([]string{
|
if !BasicCommandExistByPath("kubectl") {
|
||||||
"kubectl",
|
result = append(result, "命令不存在", "kubectl")
|
||||||
})
|
|
||||||
if !commandExist {
|
|
||||||
result = append(result, "命令不存在", commandName)
|
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
folder, i := CheckAppInstallFolder()
|
folder, i := CheckAppInstallFolder()
|
||||||
@@ -825,35 +819,38 @@ func (op *AgentOsOperator) deployFront(funcArgs []string) (bool, []string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 下载模板文件
|
// 下载模板文件
|
||||||
if !PureResultSingleExecute([]string{
|
k8sFrontYamlFilePath := "/root/wdd/install/k8s-front.yaml"
|
||||||
"wget",
|
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+fontTemplate, k8sFrontYamlFilePath)
|
||||||
"-q",
|
if !ok {
|
||||||
op.OssOfflinePrefix + "/" + fontTemplate,
|
return false, resultLog
|
||||||
}) {
|
}
|
||||||
result = append(result, "下载模板文件")
|
|
||||||
|
// 根据参数 A1C2IP 替换
|
||||||
|
parseIP := net.ParseIP(funcArgs[0])
|
||||||
|
if parseIP == nil {
|
||||||
|
return false, append(result, "ip args error !")
|
||||||
|
}
|
||||||
|
if !BasicReplace(k8sFrontYamlFilePath, "A1C2IP", funcArgs[0]) {
|
||||||
|
result = append(result, "替换A1C2IP信息")
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
// 根据参数 A1C2IP 替换
|
if !BasicReplace(k8sFrontYamlFilePath, "SUPREME", funcArgs[1]) {
|
||||||
if !BasicReplace(fontTemplate, "SUPREME", funcArgs[0]) {
|
|
||||||
result = append(result, "替换SUPREME信息")
|
result = append(result, "替换SUPREME信息")
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
if !BasicReplace(fontTemplate, "A1C2IP", funcArgs[1]) {
|
if !BasicReplace(k8sFrontYamlFilePath, "KIMMY", funcArgs[6]) {
|
||||||
result = append(result, "替换A1C2IP信息")
|
result = append(result, "替换KIMMY信息")
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
|
|
||||||
// 启动服务
|
// 启动服务
|
||||||
if !PureResultSingleExecute([]string{
|
exec, strings := KubectlApplyExec(k8sFrontYamlFilePath)
|
||||||
"kubectl",
|
if !exec {
|
||||||
"apply",
|
return false, append(result, strings...)
|
||||||
"-f",
|
|
||||||
fontTemplate,
|
|
||||||
}) {
|
|
||||||
result = append(result, "创建 前端服务 失败!")
|
|
||||||
return false, result
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check all front end pod exits!
|
||||||
|
|
||||||
// 成功启动
|
// 成功启动
|
||||||
return true, []string{
|
return true, []string{
|
||||||
"前端服务 部署成功!",
|
"前端服务 部署成功!",
|
||||||
@@ -893,12 +890,20 @@ func (op *AgentOsOperator) initMinio(funcArgs []string) (bool, []string) {
|
|||||||
result = append(result, "替换SUPREME信息")
|
result = append(result, "替换SUPREME信息")
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
if !BasicReplace(initMinioTemplate, "A1C2IP", funcArgs[1]) {
|
parseIP := net.ParseIP(funcArgs[0])
|
||||||
|
if parseIP == nil {
|
||||||
|
return false, append(result, "ip args error !")
|
||||||
|
}
|
||||||
|
if !BasicReplace(initMinioTemplate, "A1C2IP", funcArgs[0]) {
|
||||||
result = append(result, "替换A1C2IP信息")
|
result = append(result, "替换A1C2IP信息")
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
if !BasicReplace(initMinioTemplate, "M2D2IP", funcArgs[1]) {
|
parseIP = net.ParseIP(funcArgs[5])
|
||||||
result = append(result, "替换A1C2IP信息")
|
if parseIP == nil {
|
||||||
|
return false, append(result, "ip args error !")
|
||||||
|
}
|
||||||
|
if !BasicReplace(initMinioTemplate, "M2D2IP", funcArgs[5]) {
|
||||||
|
result = append(result, "替换M2D2IP信息")
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -922,15 +927,12 @@ func (op *AgentOsOperator) initMinio(funcArgs []string) (bool, []string) {
|
|||||||
|
|
||||||
func (op *AgentOsOperator) deploySRS(funcArgs []string) (bool, []string) {
|
func (op *AgentOsOperator) deploySRS(funcArgs []string) (bool, []string) {
|
||||||
|
|
||||||
srsTemplate := "srs-template.yaml"
|
srsTemplate := "k8s-srs-template.yaml"
|
||||||
result := append(AppExecuteErrorLogPrefix, "开始部署SRS服务!")
|
result := append(AppExecuteErrorLogPrefix, "开始部署SRS服务!")
|
||||||
|
|
||||||
// 环境判定
|
// 环境判定
|
||||||
commandExist, commandName := BasicCommandExistsBatch([]string{
|
if !BasicCommandExistByPath("kubectl") {
|
||||||
"kubectl",
|
result = append(result, "命令不存在", "kubectl")
|
||||||
})
|
|
||||||
if !commandExist {
|
|
||||||
result = append(result, "命令不存在", commandName)
|
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
folder, i := CheckAppInstallFolder()
|
folder, i := CheckAppInstallFolder()
|
||||||
@@ -939,43 +941,51 @@ func (op *AgentOsOperator) deploySRS(funcArgs []string) (bool, []string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 下载模板文件
|
// 下载模板文件
|
||||||
if !PureResultSingleExecute([]string{
|
k8sSRSYamlFilePath := "/root/wdd/install/k8s-srs.yaml"
|
||||||
"wget",
|
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+srsTemplate, k8sSRSYamlFilePath)
|
||||||
"-q",
|
if !ok {
|
||||||
op.OssOfflinePrefix + "/" + srsTemplate,
|
return false, resultLog
|
||||||
}) {
|
|
||||||
result = append(result, "下载模板文件")
|
|
||||||
return false, result
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 根据参数 A1C2IP 替换
|
// 根据参数 A1C2IP 替换
|
||||||
if !BasicReplace(srsTemplate, "SUPREME", funcArgs[0]) {
|
if !BasicReplace(k8sSRSYamlFilePath, "SUPREME", funcArgs[1]) {
|
||||||
result = append(result, "替换SUPREME信息")
|
result = append(result, "替换SUPREME信息")
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
if !BasicReplace(srsTemplate, "A1C2IP", funcArgs[1]) {
|
parseIP := net.ParseIP(funcArgs[0])
|
||||||
|
if parseIP == nil {
|
||||||
|
return false, append(result, "ip args error !")
|
||||||
|
}
|
||||||
|
if !BasicReplace(k8sSRSYamlFilePath, "A1C2IP", funcArgs[0]) {
|
||||||
result = append(result, "替换A1C2IP信息")
|
result = append(result, "替换A1C2IP信息")
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
if !BasicReplace(srsTemplate, "A1C1JS", funcArgs[1]) {
|
if !BasicReplace(k8sSRSYamlFilePath, "A1C1JS", funcArgs[4]) {
|
||||||
result = append(result, "替换A1C1JS信息")
|
result = append(result, "替换A1C1JS信息")
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
if !BasicReplace(srsTemplate, "M2D2IP", funcArgs[1]) {
|
parseIP = net.ParseIP(funcArgs[5])
|
||||||
|
if parseIP == nil {
|
||||||
|
return false, append(result, "ip args error !")
|
||||||
|
}
|
||||||
|
if !BasicReplace(k8sSRSYamlFilePath, "M2D2IP", funcArgs[5]) {
|
||||||
result = append(result, "替换M2D2IP信息")
|
result = append(result, "替换M2D2IP信息")
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
|
|
||||||
// 启动服务
|
if !BasicReplace(k8sSRSYamlFilePath, "KIMMY", funcArgs[6]) {
|
||||||
if !PureResultSingleExecute([]string{
|
result = append(result, "替换KIMMY信息")
|
||||||
"kubectl",
|
|
||||||
"apply",
|
|
||||||
"-f",
|
|
||||||
srsTemplate,
|
|
||||||
}) {
|
|
||||||
result = append(result, "部署 SRS 失败!")
|
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 启动服务
|
||||||
|
exec, strings := KubectlApplyExec(k8sSRSYamlFilePath)
|
||||||
|
if !exec {
|
||||||
|
return false, append(result, strings...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// check pod ok
|
||||||
|
|
||||||
// 成功启动
|
// 成功启动
|
||||||
return true, []string{
|
return true, []string{
|
||||||
"部署 SRS 成功!",
|
"部署 SRS 成功!",
|
||||||
@@ -1008,48 +1018,52 @@ func (op *AgentOsOperator) modifyNacos(funcArgs []string) (bool, []string) {
|
|||||||
|
|
||||||
func (op *AgentOsOperator) deployBackend(funcArgs []string) (bool, []string) {
|
func (op *AgentOsOperator) deployBackend(funcArgs []string) (bool, []string) {
|
||||||
|
|
||||||
backendTemplate := "backend-template.yaml"
|
backendTemplate := "k8s-backend-template.yaml"
|
||||||
result := append(AppExecuteErrorLogPrefix, "部署 后端 服务 !")
|
result := append(AppExecuteErrorLogPrefix, "部署 后端 服务 !")
|
||||||
|
|
||||||
// 环境判定
|
// 环境判定
|
||||||
commandExist, commandName := BasicCommandExistsBatch([]string{
|
if !BasicCommandExistByPath("kubectl") {
|
||||||
"kubectl",
|
result = append(result, "命令不存在", "kubectl")
|
||||||
})
|
|
||||||
if !commandExist {
|
|
||||||
result = append(result, "命令不存在", commandName)
|
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
|
folder, i := CheckAppInstallFolder()
|
||||||
|
if !folder {
|
||||||
|
return false, i
|
||||||
|
}
|
||||||
|
|
||||||
// 下载模板文件
|
// 下载模板文件
|
||||||
if !PureResultSingleExecute([]string{
|
k8sBackendYamlFilePath := "/root/wdd/install/k8s-backend.yaml"
|
||||||
"wget",
|
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+backendTemplate, k8sBackendYamlFilePath)
|
||||||
"-q",
|
if !ok {
|
||||||
op.OssOfflinePrefix + "/" + backendTemplate,
|
return false, resultLog
|
||||||
}) {
|
}
|
||||||
result = append(result, "下载模板文件")
|
|
||||||
|
// 根据参数 A1C2IP 替换
|
||||||
|
parseIP := net.ParseIP(funcArgs[0])
|
||||||
|
if parseIP == nil {
|
||||||
|
return false, append(result, "ip args error !")
|
||||||
|
}
|
||||||
|
if !BasicReplace(k8sBackendYamlFilePath, "A1C2IP", funcArgs[0]) {
|
||||||
|
result = append(result, "替换A1C2IP信息")
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
// 根据参数 A1C2IP 替换
|
if !BasicReplace(k8sBackendYamlFilePath, "SUPREME", funcArgs[1]) {
|
||||||
if !BasicReplace(backendTemplate, "SUPREME", funcArgs[0]) {
|
|
||||||
result = append(result, "替换SUPREME信息")
|
result = append(result, "替换SUPREME信息")
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
if !BasicReplace(backendTemplate, "A1C2IP", funcArgs[1]) {
|
if !BasicReplace(k8sBackendYamlFilePath, "KIMMY", funcArgs[6]) {
|
||||||
result = append(result, "替换A1C2IP信息")
|
result = append(result, "替换KIMMY信息")
|
||||||
return false, result
|
return false, result
|
||||||
}
|
}
|
||||||
|
|
||||||
// 启动服务
|
// 启动服务
|
||||||
if !PureResultSingleExecute([]string{
|
exec, strings := KubectlApplyExec(k8sBackendYamlFilePath)
|
||||||
"kubectl",
|
if !exec {
|
||||||
"apply",
|
return false, append(result, strings...)
|
||||||
"-f",
|
|
||||||
backendTemplate,
|
|
||||||
}) {
|
|
||||||
result = append(result, "创建 后端服务 失败!")
|
|
||||||
return false, result
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check all front end pod exits!
|
||||||
|
|
||||||
// 成功启动
|
// 成功启动
|
||||||
return true, []string{
|
return true, []string{
|
||||||
"后端服务 部署成功!",
|
"后端服务 部署成功!",
|
||||||
|
|||||||
@@ -222,6 +222,7 @@ func BasicPrettyPrint(resultOk bool, resultLog []string) {
|
|||||||
}
|
}
|
||||||
for _, s := range resultLog {
|
for _, s := range resultLog {
|
||||||
fmt.Println(s)
|
fmt.Println(s)
|
||||||
|
fmt.Println()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,127 +1,183 @@
|
|||||||
package executor
|
package executor
|
||||||
|
|
||||||
import (
|
//import (
|
||||||
"bufio"
|
// _ "github.com/go-sql-driver/mysql"
|
||||||
"database/sql"
|
//)
|
||||||
"fmt"
|
|
||||||
_ "github.com/go-sql-driver/mysql"
|
|
||||||
"os"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
func MysqlSqlFileLoad(jackeyLoveIp string, jackeyLoveFileList []string) (bool, []string) {
|
//func MysqlSqlFileLoad(jackeyLoveIp string, jackeyLoveFileList []string) (bool, []string) {
|
||||||
|
//
|
||||||
|
// dsn := "root:QzfXQhd3bQ@tcp(" + jackeyLoveIp + ":33306)/"
|
||||||
|
// db, err := sql.Open("mysql", dsn)
|
||||||
|
// if err != nil {
|
||||||
|
// errConnect := fmt.Sprintf("[MysqlSqlFileLoad]- mysql connection error ! please check ! => %s error is %s ", dsn, err.Error())
|
||||||
|
// log.Error(errConnect)
|
||||||
|
// return false, []string{
|
||||||
|
// errConnect,
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// defer db.Close()
|
||||||
|
//
|
||||||
|
// // 确保数据库连接是有效的
|
||||||
|
// if err := db.Ping(); err != nil {
|
||||||
|
// errConnect := "[MysqlSqlFileLoad]- mysql ping error ! please check !"
|
||||||
|
// log.Error(errConnect)
|
||||||
|
// return false, []string{
|
||||||
|
// errConnect,
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// for _, jackeyLoveFile := range jackeyLoveFileList {
|
||||||
|
//
|
||||||
|
// // 打开 SQL 文件
|
||||||
|
// jackeyLove, err := os.Open(jackeyLoveFile)
|
||||||
|
// if err != nil {
|
||||||
|
// log.ErrorF("[MysqlSqlFileLoad] - failed to load jackeyLoveFile => %s", jackeyLove.Name())
|
||||||
|
// }
|
||||||
|
// defer jackeyLove.Close()
|
||||||
|
//
|
||||||
|
// // 逐行读取 SQL 文件并执行
|
||||||
|
// query := ""
|
||||||
|
// delimiterSwitched := false
|
||||||
|
// scanner := bufio.NewScanner(jackeyLove)
|
||||||
|
// for scanner.Scan() {
|
||||||
|
// sqlStatement := scanner.Text()
|
||||||
|
//
|
||||||
|
// if strings.HasPrefix(strings.TrimSpace(sqlStatement), "DELIMITER") {
|
||||||
|
// delimiterSwitched = true
|
||||||
|
// continue
|
||||||
|
// }
|
||||||
|
// if delimiterSwitched {
|
||||||
|
// if strings.TrimSpace(sqlStatement) == "" || strings.TrimSpace(sqlStatement) == ";" {
|
||||||
|
// delimiterSwitched = false
|
||||||
|
// // 替换自定义分隔符为 ;
|
||||||
|
// sqlStatement = strings.ReplaceAll(sqlStatement, ";;", ";")
|
||||||
|
// } else {
|
||||||
|
// // 忽略自定义分隔符行
|
||||||
|
// continue
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 这里可以添加逻辑来忽略空行或注释行
|
||||||
|
// if sqlStatement == "" || sqlStatement[:2] == "--" || sqlStatement[:2] == "/*" {
|
||||||
|
// continue
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// query += sqlStatement
|
||||||
|
//
|
||||||
|
// if strings.HasSuffix(strings.TrimSpace(sqlStatement), ";") {
|
||||||
|
//
|
||||||
|
// fmt.Printf("%s -> %s", jackeyLoveFile, query)
|
||||||
|
//
|
||||||
|
// _, err := db.Exec(query)
|
||||||
|
// if err != nil {
|
||||||
|
// executeError := fmt.Sprintf("[MysqlSqlFileLoad] - jackeyLoveFile %s 执行出错: %s, 错误信息: %s", jackeyLove.Name(), sqlStatement, err.Error())
|
||||||
|
// log.Error(executeError)
|
||||||
|
// return false, []string{
|
||||||
|
// executeError,
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// query = ""
|
||||||
|
// } else {
|
||||||
|
// query += " " // 添加空格以便连接多行语句
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 检查扫描过程中是否有错误
|
||||||
|
// if err := scanner.Err(); err != nil {
|
||||||
|
// executeError := fmt.Sprintf("[MysqlSqlFileLoad] - jackeyLoveFile %s 文件加载错误! 错误信息: %s", jackeyLove.Name(), err.Error())
|
||||||
|
// log.Error(executeError)
|
||||||
|
// return false, []string{
|
||||||
|
// executeError,
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// log.DebugF("[MysqlSqlFileLoad] - jackeyLoveFile %s execute success !", jackeyLove.Name())
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return true, append(jackeyLoveFileList, "[MysqlSqlFileLoad] all file loaded !")
|
||||||
|
//}
|
||||||
|
|
||||||
dsn := "root:QzfXQhd3bQ@tcp(" + jackeyLoveIp + ":33306)/"
|
//func MySqlParseSQLFile(sqlFilePath string) []string {
|
||||||
db, err := sql.Open("mysql", dsn)
|
//
|
||||||
if err != nil {
|
// var result []string
|
||||||
errConnect := fmt.Sprintf("[MysqlSqlFileLoad]- mysql connection error ! please check ! => %s error is %s ", dsn, err.Error())
|
//
|
||||||
log.Error(errConnect)
|
// // 打开 SQL 文件
|
||||||
return false, []string{
|
// jackeyLove, err := os.Open(sqlFilePath)
|
||||||
errConnect,
|
// if err != nil {
|
||||||
}
|
// log.ErrorF("[MySqlParseSQLFile] - failed to load jackeyLoveFile => %s", jackeyLove.Name())
|
||||||
}
|
// }
|
||||||
defer db.Close()
|
// defer jackeyLove.Close()
|
||||||
|
//
|
||||||
// 确保数据库连接是有效的
|
// // 逐行读取 SQL 文件并执行
|
||||||
if err := db.Ping(); err != nil {
|
// query := ""
|
||||||
errConnect := "[MysqlSqlFileLoad]- mysql ping error ! please check !"
|
// delimiterSwitched := false
|
||||||
log.Error(errConnect)
|
// scanner := bufio.NewScanner(jackeyLove)
|
||||||
return false, []string{
|
// for scanner.Scan() {
|
||||||
errConnect,
|
// sqlStatement := scanner.Text()
|
||||||
}
|
//
|
||||||
}
|
// if strings.HasPrefix(strings.TrimSpace(sqlStatement), "DELIMITER") {
|
||||||
|
// delimiterSwitched = true
|
||||||
for _, jackeyLoveFile := range jackeyLoveFileList {
|
// continue
|
||||||
|
// }
|
||||||
// 打开 SQL 文件
|
// if delimiterSwitched {
|
||||||
jackeyLove, err := os.Open(jackeyLoveFile)
|
// if strings.TrimSpace(sqlStatement) == "" || strings.TrimSpace(sqlStatement) == ";" {
|
||||||
if err != nil {
|
// delimiterSwitched = false
|
||||||
log.ErrorF("[MysqlSqlFileLoad] - failed to load jackeyLoveFile => %s", jackeyLove.Name())
|
// // 替换自定义分隔符为 ;
|
||||||
}
|
// sqlStatement = strings.ReplaceAll(sqlStatement, ";;", ";")
|
||||||
defer jackeyLove.Close()
|
// } else {
|
||||||
|
// // 忽略自定义分隔符行
|
||||||
// 逐行读取 SQL 文件并执行
|
// continue
|
||||||
query := ""
|
// }
|
||||||
delimiterSwitched := false
|
// }
|
||||||
scanner := bufio.NewScanner(jackeyLove)
|
//
|
||||||
for scanner.Scan() {
|
// // 这里可以添加逻辑来忽略空行或注释行
|
||||||
sqlStatement := scanner.Text()
|
// if sqlStatement == "" || sqlStatement[:2] == "--" || sqlStatement[:2] == "/*" {
|
||||||
|
// continue
|
||||||
if strings.HasPrefix(strings.TrimSpace(sqlStatement), "DELIMITER") {
|
// }
|
||||||
delimiterSwitched = true
|
//
|
||||||
continue
|
// query += sqlStatement
|
||||||
}
|
//
|
||||||
if delimiterSwitched {
|
// if strings.HasSuffix(strings.TrimSpace(sqlStatement), ";") {
|
||||||
if strings.TrimSpace(sqlStatement) == "" || strings.TrimSpace(sqlStatement) == ";" {
|
//
|
||||||
delimiterSwitched = false
|
// result = append(result, query)
|
||||||
// 替换自定义分隔符为 ;
|
//
|
||||||
sqlStatement = strings.ReplaceAll(sqlStatement, ";;", ";")
|
// query = ""
|
||||||
} else {
|
// } else {
|
||||||
// 忽略自定义分隔符行
|
// query += "" // 添加空格以便连接多行语句
|
||||||
continue
|
// }
|
||||||
}
|
// }
|
||||||
}
|
//
|
||||||
|
// // 检查扫描过程中是否有错误
|
||||||
// 这里可以添加逻辑来忽略空行或注释行
|
// if err := scanner.Err(); err != nil {
|
||||||
if sqlStatement == "" || sqlStatement[:2] == "--" || sqlStatement[:2] == "/*" {
|
// executeError := fmt.Sprintf("[MysqlSqlFileLoad] - jackeyLoveFile %s 文件加载错误! 错误信息: %s", jackeyLove.Name(), err.Error())
|
||||||
continue
|
// log.Error(executeError)
|
||||||
}
|
//
|
||||||
|
//
|
||||||
query += sqlStatement
|
// }
|
||||||
|
//
|
||||||
if strings.HasSuffix(strings.TrimSpace(sqlStatement), ";") {
|
// return result
|
||||||
|
//}
|
||||||
fmt.Printf("%s -> %s", jackeyLoveFile, query)
|
//
|
||||||
|
//func MySqlConnection(jackeyLoveIp string, jackeyLovePort string) (bool, []string) {
|
||||||
_, err := db.Exec(query)
|
//
|
||||||
if err != nil {
|
// dsn := "root:QzfXQhd3bQ@tcp(" + jackeyLoveIp + ":33306)/"
|
||||||
executeError := fmt.Sprintf("[MysqlSqlFileLoad] - jackeyLoveFile %s 执行出错: %s, 错误信息: %s", jackeyLove.Name(), sqlStatement, err.Error())
|
// db, err := sql.Open("mysql", dsn)
|
||||||
log.Error(executeError)
|
// if err != nil {
|
||||||
return false, []string{
|
// errConnect := fmt.Sprintf("[MysqlSqlFileLoad]- mysql connection error ! please check ! => %s error is %s ", dsn, err.Error())
|
||||||
executeError,
|
// log.Error(errConnect)
|
||||||
}
|
// return false, []string{
|
||||||
}
|
// errConnect,
|
||||||
query = ""
|
// }
|
||||||
} else {
|
// }
|
||||||
query += " " // 添加空格以便连接多行语句
|
// defer db.Close()
|
||||||
}
|
//
|
||||||
}
|
// // 确保数据库连接是有效的
|
||||||
|
// if err := db.Ping(); err != nil {
|
||||||
// 检查扫描过程中是否有错误
|
// errConnect := "[MysqlSqlFileLoad]- mysql ping error ! please check !"
|
||||||
if err := scanner.Err(); err != nil {
|
// log.Error(errConnect)
|
||||||
executeError := fmt.Sprintf("[MysqlSqlFileLoad] - jackeyLoveFile %s 文件加载错误! 错误信息: %s", jackeyLove.Name(), err.Error())
|
// return false, []string{
|
||||||
log.Error(executeError)
|
// errConnect,
|
||||||
return false, []string{
|
// }
|
||||||
executeError,
|
// }
|
||||||
}
|
//
|
||||||
}
|
// return true, nil
|
||||||
log.DebugF("[MysqlSqlFileLoad] - jackeyLoveFile %s execute success !", jackeyLove.Name())
|
//}
|
||||||
}
|
|
||||||
|
|
||||||
return true, append(jackeyLoveFileList, "[MysqlSqlFileLoad] all file loaded !")
|
|
||||||
}
|
|
||||||
|
|
||||||
func MySqlConnection(jackeyLoveIp string, jackeyLovePort string) (bool, []string) {
|
|
||||||
|
|
||||||
dsn := "root:QzfXQhd3bQ@tcp(" + jackeyLoveIp + ":33306)/"
|
|
||||||
db, err := sql.Open("mysql", dsn)
|
|
||||||
if err != nil {
|
|
||||||
errConnect := fmt.Sprintf("[MysqlSqlFileLoad]- mysql connection error ! please check ! => %s error is %s ", dsn, err.Error())
|
|
||||||
log.Error(errConnect)
|
|
||||||
return false, []string{
|
|
||||||
errConnect,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
defer db.Close()
|
|
||||||
|
|
||||||
// 确保数据库连接是有效的
|
|
||||||
if err := db.Ping(); err != nil {
|
|
||||||
errConnect := "[MysqlSqlFileLoad]- mysql ping error ! please check !"
|
|
||||||
log.Error(errConnect)
|
|
||||||
return false, []string{
|
|
||||||
errConnect,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,13 +1,18 @@
|
|||||||
package executor
|
package executor
|
||||||
|
|
||||||
import "testing"
|
//func TestMySqlConnection(t *testing.T) {
|
||||||
|
//
|
||||||
func TestMySqlConnection(t *testing.T) {
|
// connection, strings := MySqlConnection("10.250.0.126", "33306")
|
||||||
|
// if !connection {
|
||||||
connection, strings := MySqlConnection("10.250.0.126", "33306")
|
// t.Error(strings)
|
||||||
if !connection {
|
// }
|
||||||
t.Error(strings)
|
//
|
||||||
}
|
// println("success!")
|
||||||
|
//}
|
||||||
println("success!")
|
//
|
||||||
}
|
//func TestMySqlParseSQLFile(t *testing.T) {
|
||||||
|
//
|
||||||
|
// parseSQLFile := MySqlParseSQLFile("C:\\Users\\wdd\\Documents\\4.1.6-部署\\init_5.1.0\\1_all_tables_demo_5.1.0.sql")
|
||||||
|
//
|
||||||
|
// BasicPrettyPrint(true, parseSQLFile)
|
||||||
|
//}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ module agent-go
|
|||||||
go 1.18
|
go 1.18
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/go-sql-driver/mysql v1.7.1
|
|
||||||
github.com/magiconair/properties v1.8.7
|
github.com/magiconair/properties v1.8.7
|
||||||
github.com/mittwald/goharbor-client/v5 v5.4.2
|
github.com/mittwald/goharbor-client/v5 v5.4.2
|
||||||
github.com/panjf2000/ants/v2 v2.7.2
|
github.com/panjf2000/ants/v2 v2.7.2
|
||||||
|
|||||||
@@ -51,10 +51,10 @@ public enum AppFunctionEnum {
|
|||||||
"部署k8s mysql, 参数 A1C2IP, SUPREME"
|
"部署k8s mysql, 参数 A1C2IP, SUPREME"
|
||||||
),
|
),
|
||||||
|
|
||||||
LOAD_MYSQL_INIT_SCRIPT(
|
// LOAD_MYSQL_INIT_SCRIPT(
|
||||||
"LOAD_MYSQL_INIT_SCRIPT",
|
// "LOAD_MYSQL_INIT_SCRIPT",
|
||||||
"加载MySQl的初始化脚本,"
|
// "加载MySQl的初始化脚本,废弃,手动!"
|
||||||
),
|
// ),
|
||||||
|
|
||||||
DEPLOY_K8S_REDIS(
|
DEPLOY_K8S_REDIS(
|
||||||
"DEPLOY_K8S_REDIS",
|
"DEPLOY_K8S_REDIS",
|
||||||
|
|||||||
@@ -103,7 +103,10 @@ public class AppFuncScheduler {
|
|||||||
// AppFunctionEnum.DEPLOY_K8S_MYSQL
|
// AppFunctionEnum.DEPLOY_K8S_MYSQL
|
||||||
// AppFunctionEnum.DEPLOY_K8S_REDIS
|
// AppFunctionEnum.DEPLOY_K8S_REDIS
|
||||||
// AppFunctionEnum.DEPLOY_K8S_PVC
|
// AppFunctionEnum.DEPLOY_K8S_PVC
|
||||||
AppFunctionEnum.LOAD_MYSQL_INIT_SCRIPT
|
AppFunctionEnum.DEPLOY_INGRESS,
|
||||||
|
AppFunctionEnum.DEPLOY_FRONTEND,
|
||||||
|
AppFunctionEnum.DEPLOY_BACKEND
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user