fix: 网元版本操作支持install

This commit is contained in:
TsMask
2024-04-25 14:23:50 +08:00
parent 338e2eaa98
commit a9af655d63
3 changed files with 81 additions and 23 deletions

View File

@@ -157,10 +157,10 @@ func (s *NeVersionController) Remove(c *gin.Context) {
func (s *NeVersionController) Operate(c *gin.Context) { func (s *NeVersionController) Operate(c *gin.Context) {
language := ctx.AcceptLanguage(c) language := ctx.AcceptLanguage(c)
var body struct { var body struct {
Action string `json:"action" binding:"required,oneof=upgrade rollback"` // 操作行为 Action string `json:"action" binding:"required,oneof=install upgrade rollback"` // 操作行为
NeType string `json:"neType" gorm:"ne_type" binding:"required"` // 网元类型 NeType string `json:"neType" gorm:"ne_type" binding:"required"` // 网元类型
NeId string `json:"neId" gorm:"ne_id" binding:"required"` // 网元ID NeId string `json:"neId" gorm:"ne_id" binding:"required"` // 网元ID
Preinput map[string]string `json:"preinput" ` // 预先输入参数 Preinput map[string]string `json:"preinput" ` // 预先输入参数
} }
if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil { if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil {
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))

View File

@@ -30,6 +30,6 @@ type INeVersion interface {
// Operate 操作版本上传到网元主机执行命令 // Operate 操作版本上传到网元主机执行命令
// //
// action 安装行为upgrade rollback // action 安装行为:install upgrade rollback
Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error) Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error)
} }

View File

@@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
"path/filepath" "path/filepath"
"runtime"
"strings" "strings"
"time" "time"
@@ -97,10 +98,10 @@ func (r *NeVersionImpl) CheckUniqueTypeAndID(neType, neId, id string) bool {
// Operate 操作版本上传到网元主机执行命令 // Operate 操作版本上传到网元主机执行命令
// //
// action 安装行为upgrade rollback // action 安装行为:install upgrade rollback
func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error) { func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error) {
softwarePath := neVersion.Path softwarePath := neVersion.Path
if action == "upgrade" { if action == "install" || action == "upgrade" {
softwarePath = neVersion.NewPath softwarePath = neVersion.NewPath
} }
if action == "rollback" { if action == "rollback" {
@@ -136,6 +137,25 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
return "", fmt.Errorf("error uploading package") return "", fmt.Errorf("error uploading package")
} }
if action == "install" {
// ========= para5G公共参数文件 start =========
// 网管本地路径
omcPara5GFilePath := "/usr/local/etc/omc/para5G.yaml"
if runtime.GOOS == "windows" {
omcPara5GFilePath = fmt.Sprintf("C:%s", omcPara5GFilePath)
}
// 网元端配置路径
nePara5GFilePath := "/usr/local/etc/conf/para5G.yaml"
nePara5GFileDir := filepath.Dir(nePara5GFilePath)
// 修改网元文件权限
sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p %s && sudo chmod o+w %s && sudo chmod o+w %s", nePara5GFileDir, nePara5GFileDir, nePara5GFilePath))
// 复制到网元进行覆盖
if err = sftpClient.CopyFileLocalToRemote(omcPara5GFilePath, nePara5GFilePath); err != nil {
return "", fmt.Errorf("please check if scp remote copy is allowed")
}
// ========= para5G公共参数文件 end =========
}
// ========= 安装命令 start ========= // ========= 安装命令 start =========
// 命令终止结束标记 // 命令终止结束标记
okFlagStr := fmt.Sprintf("%s version %s successful!", neVersion.NeType, action) okFlagStr := fmt.Sprintf("%s version %s successful!", neVersion.NeType, action)
@@ -149,27 +169,52 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
// 预先参数 // 预先参数
cmdStrArr := []string{} cmdStrArr := []string{}
if neVersion.NeType == "OMC" { if neVersion.NeType == "OMC" {
cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh stop")
cmdStrArr = append(cmdStrArr, pkgCmdStr) cmdStrArr = append(cmdStrArr, pkgCmdStr)
cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/setomc.sh -m upgrade") // 升级数据库 if action == "install" {
cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/setomc.sh -m install") // 初始化数据库
} else {
cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh stop")
cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/setomc.sh -m upgrade") // 升级数据库
}
cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh restart") cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh restart")
return sshClient.RunCMD(fmt.Sprintf("nohup sh -c \"sleep 15s && %s\" > /dev/null 2>&1 & \n", strings.Join(cmdStrArr, " && "))) return sshClient.RunCMD(fmt.Sprintf("nohup sh -c \"sleep 3s && %s\" > /dev/null 2>&1 & \n", strings.Join(cmdStrArr, " && ")))
} else if neVersion.NeType == "IMS" { } else if neVersion.NeType == "IMS" {
if !strings.Contains(strings.ToLower(fileName), "ims") { if !strings.Contains(strings.ToLower(fileName), "ims") {
return "", fmt.Errorf("error file package not ims") return "", fmt.Errorf("error file package not ims")
} }
cmdStrArr = append(cmdStrArr, "sudo ims-stop \n") if action == "install" {
cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n")
// P/I/S-CSCF Config 配置覆盖 cmdStrArr = append(cmdStrArr, "sudo ims-stop && sudo ims-start")
if pisCSCF, ok := preinput["pisCSCF"]; ok && pisCSCF != "" { // 公网 PLMN地址
cmdStrArr = append(cmdStrArr, fmt.Sprintf("%s \n", pisCSCF)) pubIP, pubIPOk := preinput["pubIP"]
mcc, mccOk := preinput["mcc"]
mnc, mncOk := preinput["mnc"]
if pubIPOk && pubIP != "" && mccOk && mcc != "" && mncOk && mnc != "" {
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modipplmn.sh %s %s %s \n", pubIP, mcc, mnc))
}
// 内网 服务地址
if priIP, ok := preinput["priIP"]; ok && priIP != "" {
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo /usr/local/etc/ims/default/tools/modintraip.sh %s \n", priIP))
}
// 30s后停止服务
cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 30s && sudo ims-stop\" > /dev/null 2>&1 & \n")
} else {
cmdStrArr = append(cmdStrArr, "sudo ims-stop \n")
cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n")
cmdStrArr = append(cmdStrArr, "sudo ims-start \n")
} }
cmdStrArr = append(cmdStrArr, "sudo ims-start \n")
} else { } else {
neTypeLower := strings.ToLower(neVersion.NeType) neTypeLower := strings.ToLower(neVersion.NeType)
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s stop \n", neTypeLower)) if action == "install" {
cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n")
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower)) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower))
// 30s后停止服务
cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 30s && sudo service %s stop\" > /dev/null 2>&1 & \n", neTypeLower))
} else {
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s stop \n", neTypeLower))
cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n")
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo service %s restart \n", neTypeLower))
}
} }
// 删除软件包 // 删除软件包
@@ -208,11 +253,13 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
if !firstRead { if !firstRead {
logMsg += outputStr logMsg += outputStr
} }
// IMS预输入 // IMS预输入 P/I/S-CSCF Config 配置覆盖
if neVersion.NeType == "IMS" && strings.Contains(outputStr, "(P/I/S-CSCF Config)? <y/n>") { if neVersion.NeType == "IMS" && strings.Contains(outputStr, "(P/I/S-CSCF Config)? <y/n>") {
shiftElement := cmdStrArr[0] // 获取第一个元素 if pisCSCF, ok := preinput["pisCSCF"]; ok && pisCSCF != "" {
cmdStrArr = cmdStrArr[1:] // 将第一个元素从切片中移除 clientSession.Write(fmt.Sprintf("%s \n", pisCSCF))
clientSession.Write(shiftElement) } else {
clientSession.Write("y \n")
}
continue continue
} }
// 命令终止符后继续执行命令 // 命令终止符后继续执行命令
@@ -244,6 +291,17 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
curName := verInfo.Name curName := verInfo.Name
curVersion := verInfo.Version curVersion := verInfo.Version
curPath := verInfo.Path curPath := verInfo.Path
if action == "install" {
verInfo.Name = neVersion.NewName
verInfo.Version = neVersion.NewVersion
verInfo.Path = neVersion.NewPath
verInfo.PreName = "-"
verInfo.PreVersion = "-"
verInfo.PrePath = "-"
verInfo.NewName = "-"
verInfo.NewVersion = "-"
verInfo.NewPath = "-"
}
if action == "upgrade" { if action == "upgrade" {
verInfo.Name = neVersion.NewName verInfo.Name = neVersion.NewName
verInfo.Version = neVersion.NewVersion verInfo.Version = neVersion.NewVersion