fix: 网元版本操作支持install
This commit is contained in:
@@ -157,10 +157,10 @@ func (s *NeVersionController) Remove(c *gin.Context) {
|
||||
func (s *NeVersionController) Operate(c *gin.Context) {
|
||||
language := ctx.AcceptLanguage(c)
|
||||
var body struct {
|
||||
Action string `json:"action" binding:"required,oneof=upgrade rollback"` // 操作行为
|
||||
NeType string `json:"neType" gorm:"ne_type" binding:"required"` // 网元类型
|
||||
NeId string `json:"neId" gorm:"ne_id" binding:"required"` // 网元ID
|
||||
Preinput map[string]string `json:"preinput" ` // 预先输入参数
|
||||
Action string `json:"action" binding:"required,oneof=install upgrade rollback"` // 操作行为
|
||||
NeType string `json:"neType" gorm:"ne_type" binding:"required"` // 网元类型
|
||||
NeId string `json:"neId" gorm:"ne_id" binding:"required"` // 网元ID
|
||||
Preinput map[string]string `json:"preinput" ` // 预先输入参数
|
||||
}
|
||||
if err := c.ShouldBindBodyWith(&body, binding.JSON); err != nil {
|
||||
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
||||
|
||||
@@ -30,6 +30,6 @@ type INeVersion interface {
|
||||
|
||||
// Operate 操作版本上传到网元主机执行命令
|
||||
//
|
||||
// action 安装行为:upgrade rollback
|
||||
// action 安装行为:install upgrade rollback
|
||||
Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error)
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -97,10 +98,10 @@ func (r *NeVersionImpl) CheckUniqueTypeAndID(neType, neId, id string) bool {
|
||||
|
||||
// Operate 操作版本上传到网元主机执行命令
|
||||
//
|
||||
// action 安装行为:upgrade rollback
|
||||
// action 安装行为:install upgrade rollback
|
||||
func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error) {
|
||||
softwarePath := neVersion.Path
|
||||
if action == "upgrade" {
|
||||
if action == "install" || action == "upgrade" {
|
||||
softwarePath = neVersion.NewPath
|
||||
}
|
||||
if action == "rollback" {
|
||||
@@ -136,6 +137,25 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
|
||||
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 =========
|
||||
// 命令终止结束标记
|
||||
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{}
|
||||
if neVersion.NeType == "OMC" {
|
||||
cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/omcsvc.sh stop")
|
||||
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")
|
||||
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" {
|
||||
if !strings.Contains(strings.ToLower(fileName), "ims") {
|
||||
return "", fmt.Errorf("error file package not ims")
|
||||
}
|
||||
cmdStrArr = append(cmdStrArr, "sudo ims-stop \n")
|
||||
cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n")
|
||||
// P/I/S-CSCF Config 配置覆盖
|
||||
if pisCSCF, ok := preinput["pisCSCF"]; ok && pisCSCF != "" {
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("%s \n", pisCSCF))
|
||||
if action == "install" {
|
||||
cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n")
|
||||
cmdStrArr = append(cmdStrArr, "sudo ims-stop && sudo ims-start")
|
||||
// 公网 PLMN地址
|
||||
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 {
|
||||
neTypeLower := strings.ToLower(neVersion.NeType)
|
||||
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))
|
||||
if action == "install" {
|
||||
cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n")
|
||||
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 {
|
||||
logMsg += outputStr
|
||||
}
|
||||
// IMS预输入
|
||||
// IMS预输入 P/I/S-CSCF Config 配置覆盖
|
||||
if neVersion.NeType == "IMS" && strings.Contains(outputStr, "(P/I/S-CSCF Config)? <y/n>") {
|
||||
shiftElement := cmdStrArr[0] // 获取第一个元素
|
||||
cmdStrArr = cmdStrArr[1:] // 将第一个元素从切片中移除
|
||||
clientSession.Write(shiftElement)
|
||||
if pisCSCF, ok := preinput["pisCSCF"]; ok && pisCSCF != "" {
|
||||
clientSession.Write(fmt.Sprintf("%s \n", pisCSCF))
|
||||
} else {
|
||||
clientSession.Write("y \n")
|
||||
}
|
||||
continue
|
||||
}
|
||||
// 命令终止符后继续执行命令
|
||||
@@ -244,6 +291,17 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
|
||||
curName := verInfo.Name
|
||||
curVersion := verInfo.Version
|
||||
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" {
|
||||
verInfo.Name = neVersion.NewName
|
||||
verInfo.Version = neVersion.NewVersion
|
||||
|
||||
Reference in New Issue
Block a user