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) {
|
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")))
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user