[ Agent ] [ App ] - ingress front backend srs

This commit is contained in:
zeaslity
2023-12-06 09:53:21 +08:00
parent 386812625e
commit 46c9668ce6
7 changed files with 415 additions and 337 deletions

View File

@@ -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{
"后端服务 部署成功!",