[ Agent ] [ App ] - ingress front backend srs
This commit is contained in:
@@ -3,12 +3,9 @@ package executor
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -59,9 +56,9 @@ func (op *AgentOsOperator) Deploy(appFuncName string, funcArgs ...string) (bool,
|
||||
case "DEPLOY_K8S_MYSQL":
|
||||
resultOK, result = op.deployMySQL(funcArgs)
|
||||
break
|
||||
case "LOAD_MYSQL_INIT_SCRIPT":
|
||||
resultOK, result = op.loadMysqlInitScript(funcArgs)
|
||||
break
|
||||
//case "LOAD_MYSQL_INIT_SCRIPT":
|
||||
// resultOK, result = op.loadMysqlInitScript(funcArgs)
|
||||
// break
|
||||
case "checkMySQL":
|
||||
resultOK, result = op.checkMySQL(funcArgs)
|
||||
break
|
||||
@@ -499,95 +496,95 @@ func (op *AgentOsOperator) deployMySQL(funcArgs []string) (bool, []string) {
|
||||
}
|
||||
}
|
||||
|
||||
func (op *AgentOsOperator) loadMysqlInitScript(funcArgs []string) (bool, []string) {
|
||||
|
||||
folder, i := CheckAppInstallFolder()
|
||||
if !folder {
|
||||
return false, i
|
||||
}
|
||||
|
||||
// download offline sql list
|
||||
if len(funcArgs) <= 7 {
|
||||
return false, []string{
|
||||
"[loadMysqlInitScript]- MySQL初始化参数有误! 无法进行初始化",
|
||||
}
|
||||
}
|
||||
|
||||
jackeyLove := funcArgs[7]
|
||||
if !strings.HasSuffix(jackeyLove, "tar") {
|
||||
return false, []string{
|
||||
"[loadMysqlInitScript]- jackeyLove 有误!",
|
||||
}
|
||||
}
|
||||
log.DebugF("[loadMysqlInitScript] - start to load jackeyLove file from %s", jackeyLove)
|
||||
|
||||
jackeyLoveLocalPrefix := "/root/wdd/jackeylove/"
|
||||
PureResultSingleExecute([]string{
|
||||
"rm",
|
||||
"-f",
|
||||
jackeyLoveLocalPrefix,
|
||||
})
|
||||
BasicCreateFolder(jackeyLoveLocalPrefix)
|
||||
|
||||
jackeyLoveFolder := strings.Split(jackeyLove, ".tar")[0]
|
||||
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+jackeyLove, jackeyLoveLocalPrefix+jackeyLove)
|
||||
if !ok {
|
||||
return false, append(resultLog, "[loadMysqlInitScript]- jackeyLove 下载失败!")
|
||||
}
|
||||
|
||||
// unzip
|
||||
if !PureResultSingleExecute([]string{
|
||||
"tar",
|
||||
"-vxf",
|
||||
jackeyLoveLocalPrefix + jackeyLove,
|
||||
"-C",
|
||||
jackeyLoveLocalPrefix,
|
||||
}) {
|
||||
return false, []string{
|
||||
"[loadMysqlInitScript]- jackeyLove unzip error !",
|
||||
}
|
||||
}
|
||||
|
||||
// list all sql file and sort and convert to []string
|
||||
files, err := os.ReadDir(jackeyLoveLocalPrefix + jackeyLoveFolder)
|
||||
if err != nil {
|
||||
return false, []string{
|
||||
"[loadMysqlInitScript]- read unzipped jackeylove error !",
|
||||
}
|
||||
}
|
||||
|
||||
var jackeyLoveFileList []string
|
||||
for _, file := range files {
|
||||
if !file.IsDir() && filepath.Ext(file.Name()) == ".sql" {
|
||||
jackeyLoveFileList = append(jackeyLoveFileList, file.Name())
|
||||
}
|
||||
}
|
||||
|
||||
// sort for numeric order
|
||||
sortFileNames(jackeyLoveFileList)
|
||||
var jackeyLoveFileAbsolutePath []string
|
||||
for _, jackeyLoveFile := range jackeyLoveFileList {
|
||||
jackeyLoveFileAbsolutePath = append(jackeyLoveFileAbsolutePath, jackeyLoveLocalPrefix+jackeyLoveFolder+string(os.PathSeparator)+jackeyLoveFile)
|
||||
}
|
||||
|
||||
log.InfoF("[loadMysqlInitScript] - all jackey love files are => %v", jackeyLoveFileAbsolutePath)
|
||||
|
||||
// dispatch mysql execution command
|
||||
jackeyLoveIP := funcArgs[0]
|
||||
parseIP := net.ParseIP(jackeyLoveIP)
|
||||
if parseIP == nil {
|
||||
return false, []string{
|
||||
"[loadMysqlInitScript]- ip config error !",
|
||||
}
|
||||
}
|
||||
load, result := MysqlSqlFileLoad(jackeyLoveIP, jackeyLoveFileAbsolutePath)
|
||||
if !load {
|
||||
return false, result
|
||||
}
|
||||
|
||||
return true, append(jackeyLoveFileAbsolutePath, "[loadMysqlInitScript] - execute success !")
|
||||
|
||||
}
|
||||
//func (op *AgentOsOperator) loadMysqlInitScript(funcArgs []string) (bool, []string) {
|
||||
//
|
||||
// folder, i := CheckAppInstallFolder()
|
||||
// if !folder {
|
||||
// return false, i
|
||||
// }
|
||||
//
|
||||
// // download offline sql list
|
||||
// if len(funcArgs) <= 7 {
|
||||
// return false, []string{
|
||||
// "[loadMysqlInitScript]- MySQL初始化参数有误! 无法进行初始化",
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// jackeyLove := funcArgs[7]
|
||||
// if !strings.HasSuffix(jackeyLove, "tar") {
|
||||
// return false, []string{
|
||||
// "[loadMysqlInitScript]- jackeyLove 有误!",
|
||||
// }
|
||||
// }
|
||||
// log.DebugF("[loadMysqlInitScript] - start to load jackeyLove file from %s", jackeyLove)
|
||||
//
|
||||
// jackeyLoveLocalPrefix := "/root/wdd/jackeylove/"
|
||||
// PureResultSingleExecute([]string{
|
||||
// "rm",
|
||||
// "-f",
|
||||
// jackeyLoveLocalPrefix,
|
||||
// })
|
||||
// BasicCreateFolder(jackeyLoveLocalPrefix)
|
||||
//
|
||||
// jackeyLoveFolder := strings.Split(jackeyLove, ".tar")[0]
|
||||
// ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+jackeyLove, jackeyLoveLocalPrefix+jackeyLove)
|
||||
// if !ok {
|
||||
// return false, append(resultLog, "[loadMysqlInitScript]- jackeyLove 下载失败!")
|
||||
// }
|
||||
//
|
||||
// // unzip
|
||||
// if !PureResultSingleExecute([]string{
|
||||
// "tar",
|
||||
// "-vxf",
|
||||
// jackeyLoveLocalPrefix + jackeyLove,
|
||||
// "-C",
|
||||
// jackeyLoveLocalPrefix,
|
||||
// }) {
|
||||
// return false, []string{
|
||||
// "[loadMysqlInitScript]- jackeyLove unzip error !",
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // list all sql file and sort and convert to []string
|
||||
// files, err := os.ReadDir(jackeyLoveLocalPrefix + jackeyLoveFolder)
|
||||
// if err != nil {
|
||||
// return false, []string{
|
||||
// "[loadMysqlInitScript]- read unzipped jackeylove error !",
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// var jackeyLoveFileList []string
|
||||
// for _, file := range files {
|
||||
// if !file.IsDir() && filepath.Ext(file.Name()) == ".sql" {
|
||||
// jackeyLoveFileList = append(jackeyLoveFileList, file.Name())
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // sort for numeric order
|
||||
// sortFileNames(jackeyLoveFileList)
|
||||
// var jackeyLoveFileAbsolutePath []string
|
||||
// for _, jackeyLoveFile := range jackeyLoveFileList {
|
||||
// jackeyLoveFileAbsolutePath = append(jackeyLoveFileAbsolutePath, jackeyLoveLocalPrefix+jackeyLoveFolder+string(os.PathSeparator)+jackeyLoveFile)
|
||||
// }
|
||||
//
|
||||
// log.InfoF("[loadMysqlInitScript] - all jackey love files are => %v", jackeyLoveFileAbsolutePath)
|
||||
//
|
||||
// // dispatch mysql execution command
|
||||
// jackeyLoveIP := funcArgs[0]
|
||||
// parseIP := net.ParseIP(jackeyLoveIP)
|
||||
// if parseIP == nil {
|
||||
// return false, []string{
|
||||
// "[loadMysqlInitScript]- ip config error !",
|
||||
// }
|
||||
// }
|
||||
// load, result := MysqlSqlFileLoad(jackeyLoveIP, jackeyLoveFileAbsolutePath)
|
||||
// if !load {
|
||||
// return false, result
|
||||
// }
|
||||
//
|
||||
// return true, append(jackeyLoveFileAbsolutePath, "[loadMysqlInitScript] - execute success !")
|
||||
//
|
||||
//}
|
||||
|
||||
func sortFileNames(fileNames []string) {
|
||||
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{
|
||||
"Redis 部署成功!",
|
||||
@@ -750,15 +749,12 @@ func (op *AgentOsOperator) deployRedis(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 !")
|
||||
|
||||
// 环境判定
|
||||
commandExist, commandName := BasicCommandExistsBatch([]string{
|
||||
"kubectl",
|
||||
})
|
||||
if !commandExist {
|
||||
result = append(result, "命令不存在", commandName)
|
||||
if !BasicCommandExistByPath("kubectl") {
|
||||
result = append(result, "命令不存在", "kubectl")
|
||||
return false, result
|
||||
}
|
||||
folder, i := CheckAppInstallFolder()
|
||||
@@ -767,37 +763,38 @@ func (op *AgentOsOperator) deployIngress(funcArgs []string) (bool, []string) {
|
||||
}
|
||||
|
||||
// 下载模板文件
|
||||
if !PureResultSingleExecute([]string{
|
||||
"wget",
|
||||
"-q",
|
||||
op.OssOfflinePrefix + "/" + ingressTemplate,
|
||||
}) {
|
||||
result = append(result, "下载模板文件")
|
||||
return false, result
|
||||
k8sIngressYamlFile := "/root/wdd/install/k8s-ingress.yaml"
|
||||
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+ingressTemplate, k8sIngressYamlFile)
|
||||
if !ok {
|
||||
return false, resultLog
|
||||
}
|
||||
|
||||
// 根据参数 A1C2IP 替换
|
||||
if !BasicReplace(ingressTemplate, "SUPREME", funcArgs[0]) {
|
||||
result = append(result, "替换SUPREME信息")
|
||||
return false, result
|
||||
parseIP := net.ParseIP(funcArgs[0])
|
||||
if parseIP == nil {
|
||||
return false, append(result, "ip args error !")
|
||||
}
|
||||
if !BasicReplace(ingressTemplate, "A1C2IP", funcArgs[1]) {
|
||||
if !BasicReplace(k8sIngressYamlFile, "A1C2IP", funcArgs[0]) {
|
||||
result = append(result, "替换A1C2IP信息")
|
||||
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信息")
|
||||
return false, result
|
||||
}
|
||||
if !BasicReplace(k8sIngressYamlFile, "KIMMY", funcArgs[6]) {
|
||||
result = append(result, "替换KIMMY信息")
|
||||
return false, result
|
||||
}
|
||||
|
||||
// 启动服务
|
||||
if !PureResultSingleExecute([]string{
|
||||
"kubectl",
|
||||
"apply",
|
||||
"-f",
|
||||
ingressTemplate,
|
||||
}) {
|
||||
result = append(result, "创建 Ingress 失败!")
|
||||
return false, result
|
||||
exec, strings := KubectlApplyExec(k8sIngressYamlFile)
|
||||
if !exec {
|
||||
return false, append(result, strings...)
|
||||
}
|
||||
|
||||
// 成功启动
|
||||
@@ -808,15 +805,12 @@ func (op *AgentOsOperator) deployIngress(funcArgs []string) (bool, []string) {
|
||||
|
||||
func (op *AgentOsOperator) deployFront(funcArgs []string) (bool, []string) {
|
||||
|
||||
fontTemplate := "front-template.yaml"
|
||||
fontTemplate := "k8s-front-template.yaml"
|
||||
result := append(AppExecuteErrorLogPrefix, "部署 前端服务 !")
|
||||
|
||||
// 环境判定
|
||||
commandExist, commandName := BasicCommandExistsBatch([]string{
|
||||
"kubectl",
|
||||
})
|
||||
if !commandExist {
|
||||
result = append(result, "命令不存在", commandName)
|
||||
if !BasicCommandExistByPath("kubectl") {
|
||||
result = append(result, "命令不存在", "kubectl")
|
||||
return false, result
|
||||
}
|
||||
folder, i := CheckAppInstallFolder()
|
||||
@@ -825,35 +819,38 @@ func (op *AgentOsOperator) deployFront(funcArgs []string) (bool, []string) {
|
||||
}
|
||||
|
||||
// 下载模板文件
|
||||
if !PureResultSingleExecute([]string{
|
||||
"wget",
|
||||
"-q",
|
||||
op.OssOfflinePrefix + "/" + fontTemplate,
|
||||
}) {
|
||||
result = append(result, "下载模板文件")
|
||||
k8sFrontYamlFilePath := "/root/wdd/install/k8s-front.yaml"
|
||||
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+fontTemplate, k8sFrontYamlFilePath)
|
||||
if !ok {
|
||||
return false, resultLog
|
||||
}
|
||||
|
||||
// 根据参数 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
|
||||
}
|
||||
// 根据参数 A1C2IP 替换
|
||||
if !BasicReplace(fontTemplate, "SUPREME", funcArgs[0]) {
|
||||
if !BasicReplace(k8sFrontYamlFilePath, "SUPREME", funcArgs[1]) {
|
||||
result = append(result, "替换SUPREME信息")
|
||||
return false, result
|
||||
}
|
||||
if !BasicReplace(fontTemplate, "A1C2IP", funcArgs[1]) {
|
||||
result = append(result, "替换A1C2IP信息")
|
||||
if !BasicReplace(k8sFrontYamlFilePath, "KIMMY", funcArgs[6]) {
|
||||
result = append(result, "替换KIMMY信息")
|
||||
return false, result
|
||||
}
|
||||
|
||||
// 启动服务
|
||||
if !PureResultSingleExecute([]string{
|
||||
"kubectl",
|
||||
"apply",
|
||||
"-f",
|
||||
fontTemplate,
|
||||
}) {
|
||||
result = append(result, "创建 前端服务 失败!")
|
||||
return false, result
|
||||
exec, strings := KubectlApplyExec(k8sFrontYamlFilePath)
|
||||
if !exec {
|
||||
return false, append(result, strings...)
|
||||
}
|
||||
|
||||
// check all front end pod exits!
|
||||
|
||||
// 成功启动
|
||||
return true, []string{
|
||||
"前端服务 部署成功!",
|
||||
@@ -893,12 +890,20 @@ func (op *AgentOsOperator) initMinio(funcArgs []string) (bool, []string) {
|
||||
result = append(result, "替换SUPREME信息")
|
||||
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信息")
|
||||
return false, result
|
||||
}
|
||||
if !BasicReplace(initMinioTemplate, "M2D2IP", funcArgs[1]) {
|
||||
result = append(result, "替换A1C2IP信息")
|
||||
parseIP = net.ParseIP(funcArgs[5])
|
||||
if parseIP == nil {
|
||||
return false, append(result, "ip args error !")
|
||||
}
|
||||
if !BasicReplace(initMinioTemplate, "M2D2IP", funcArgs[5]) {
|
||||
result = append(result, "替换M2D2IP信息")
|
||||
return false, result
|
||||
}
|
||||
|
||||
@@ -922,15 +927,12 @@ func (op *AgentOsOperator) initMinio(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服务!")
|
||||
|
||||
// 环境判定
|
||||
commandExist, commandName := BasicCommandExistsBatch([]string{
|
||||
"kubectl",
|
||||
})
|
||||
if !commandExist {
|
||||
result = append(result, "命令不存在", commandName)
|
||||
if !BasicCommandExistByPath("kubectl") {
|
||||
result = append(result, "命令不存在", "kubectl")
|
||||
return false, result
|
||||
}
|
||||
folder, i := CheckAppInstallFolder()
|
||||
@@ -939,43 +941,51 @@ func (op *AgentOsOperator) deploySRS(funcArgs []string) (bool, []string) {
|
||||
}
|
||||
|
||||
// 下载模板文件
|
||||
if !PureResultSingleExecute([]string{
|
||||
"wget",
|
||||
"-q",
|
||||
op.OssOfflinePrefix + "/" + srsTemplate,
|
||||
}) {
|
||||
result = append(result, "下载模板文件")
|
||||
return false, result
|
||||
k8sSRSYamlFilePath := "/root/wdd/install/k8s-srs.yaml"
|
||||
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+srsTemplate, k8sSRSYamlFilePath)
|
||||
if !ok {
|
||||
return false, resultLog
|
||||
}
|
||||
|
||||
// 根据参数 A1C2IP 替换
|
||||
if !BasicReplace(srsTemplate, "SUPREME", funcArgs[0]) {
|
||||
if !BasicReplace(k8sSRSYamlFilePath, "SUPREME", funcArgs[1]) {
|
||||
result = append(result, "替换SUPREME信息")
|
||||
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信息")
|
||||
return false, result
|
||||
}
|
||||
if !BasicReplace(srsTemplate, "A1C1JS", funcArgs[1]) {
|
||||
if !BasicReplace(k8sSRSYamlFilePath, "A1C1JS", funcArgs[4]) {
|
||||
result = append(result, "替换A1C1JS信息")
|
||||
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信息")
|
||||
return false, result
|
||||
}
|
||||
|
||||
// 启动服务
|
||||
if !PureResultSingleExecute([]string{
|
||||
"kubectl",
|
||||
"apply",
|
||||
"-f",
|
||||
srsTemplate,
|
||||
}) {
|
||||
result = append(result, "部署 SRS 失败!")
|
||||
if !BasicReplace(k8sSRSYamlFilePath, "KIMMY", funcArgs[6]) {
|
||||
result = append(result, "替换KIMMY信息")
|
||||
return false, result
|
||||
}
|
||||
|
||||
// 启动服务
|
||||
exec, strings := KubectlApplyExec(k8sSRSYamlFilePath)
|
||||
if !exec {
|
||||
return false, append(result, strings...)
|
||||
}
|
||||
|
||||
// check pod ok
|
||||
|
||||
// 成功启动
|
||||
return true, []string{
|
||||
"部署 SRS 成功!",
|
||||
@@ -1008,48 +1018,52 @@ func (op *AgentOsOperator) modifyNacos(funcArgs []string) (bool, []string) {
|
||||
|
||||
func (op *AgentOsOperator) deployBackend(funcArgs []string) (bool, []string) {
|
||||
|
||||
backendTemplate := "backend-template.yaml"
|
||||
backendTemplate := "k8s-backend-template.yaml"
|
||||
result := append(AppExecuteErrorLogPrefix, "部署 后端 服务 !")
|
||||
|
||||
// 环境判定
|
||||
commandExist, commandName := BasicCommandExistsBatch([]string{
|
||||
"kubectl",
|
||||
})
|
||||
if !commandExist {
|
||||
result = append(result, "命令不存在", commandName)
|
||||
if !BasicCommandExistByPath("kubectl") {
|
||||
result = append(result, "命令不存在", "kubectl")
|
||||
return false, result
|
||||
}
|
||||
folder, i := CheckAppInstallFolder()
|
||||
if !folder {
|
||||
return false, i
|
||||
}
|
||||
|
||||
// 下载模板文件
|
||||
if !PureResultSingleExecute([]string{
|
||||
"wget",
|
||||
"-q",
|
||||
op.OssOfflinePrefix + "/" + backendTemplate,
|
||||
}) {
|
||||
result = append(result, "下载模板文件")
|
||||
k8sBackendYamlFilePath := "/root/wdd/install/k8s-backend.yaml"
|
||||
ok, resultLog := BasicDownloadFile(op.OssOfflinePrefix+backendTemplate, k8sBackendYamlFilePath)
|
||||
if !ok {
|
||||
return false, resultLog
|
||||
}
|
||||
|
||||
// 根据参数 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
|
||||
}
|
||||
// 根据参数 A1C2IP 替换
|
||||
if !BasicReplace(backendTemplate, "SUPREME", funcArgs[0]) {
|
||||
if !BasicReplace(k8sBackendYamlFilePath, "SUPREME", funcArgs[1]) {
|
||||
result = append(result, "替换SUPREME信息")
|
||||
return false, result
|
||||
}
|
||||
if !BasicReplace(backendTemplate, "A1C2IP", funcArgs[1]) {
|
||||
result = append(result, "替换A1C2IP信息")
|
||||
if !BasicReplace(k8sBackendYamlFilePath, "KIMMY", funcArgs[6]) {
|
||||
result = append(result, "替换KIMMY信息")
|
||||
return false, result
|
||||
}
|
||||
|
||||
// 启动服务
|
||||
if !PureResultSingleExecute([]string{
|
||||
"kubectl",
|
||||
"apply",
|
||||
"-f",
|
||||
backendTemplate,
|
||||
}) {
|
||||
result = append(result, "创建 后端服务 失败!")
|
||||
return false, result
|
||||
exec, strings := KubectlApplyExec(k8sBackendYamlFilePath)
|
||||
if !exec {
|
||||
return false, append(result, strings...)
|
||||
}
|
||||
|
||||
// check all front end pod exits!
|
||||
|
||||
// 成功启动
|
||||
return true, []string{
|
||||
"后端服务 部署成功!",
|
||||
|
||||
@@ -222,6 +222,7 @@ func BasicPrettyPrint(resultOk bool, resultLog []string) {
|
||||
}
|
||||
for _, s := range resultLog {
|
||||
fmt.Println(s)
|
||||
fmt.Println()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,127 +1,183 @@
|
||||
package executor
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
//import (
|
||||
// _ "github.com/go-sql-driver/mysql"
|
||||
//)
|
||||
|
||||
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)/"
|
||||
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 !")
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
//func MySqlParseSQLFile(sqlFilePath string) []string {
|
||||
//
|
||||
// var result []string
|
||||
//
|
||||
// // 打开 SQL 文件
|
||||
// jackeyLove, err := os.Open(sqlFilePath)
|
||||
// if err != nil {
|
||||
// log.ErrorF("[MySqlParseSQLFile] - 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), ";") {
|
||||
//
|
||||
// result = append(result, query)
|
||||
//
|
||||
// query = ""
|
||||
// } else {
|
||||
// query += "" // 添加空格以便连接多行语句
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // 检查扫描过程中是否有错误
|
||||
// if err := scanner.Err(); err != nil {
|
||||
// executeError := fmt.Sprintf("[MysqlSqlFileLoad] - jackeyLoveFile %s 文件加载错误! 错误信息: %s", jackeyLove.Name(), err.Error())
|
||||
// log.Error(executeError)
|
||||
//
|
||||
//
|
||||
// }
|
||||
//
|
||||
// return result
|
||||
//}
|
||||
//
|
||||
//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
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestMySqlConnection(t *testing.T) {
|
||||
|
||||
connection, strings := MySqlConnection("10.250.0.126", "33306")
|
||||
if !connection {
|
||||
t.Error(strings)
|
||||
}
|
||||
|
||||
println("success!")
|
||||
}
|
||||
//func TestMySqlConnection(t *testing.T) {
|
||||
//
|
||||
// connection, strings := MySqlConnection("10.250.0.126", "33306")
|
||||
// if !connection {
|
||||
// t.Error(strings)
|
||||
// }
|
||||
//
|
||||
// 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)
|
||||
//}
|
||||
|
||||
Reference in New Issue
Block a user