perf: 重构网元版本安装命令步骤
This commit is contained in:
@@ -704,23 +704,23 @@ func (r *NeInfoImpl) neConfPara5GDataConvert(content map[string]any) map[string]
|
||||
"UE_IP": ueIP,
|
||||
"UE_MASK": ueMask,
|
||||
"UE_CIDR": ueCicr,
|
||||
"UPF_TYPE": "LightUPF", // StandardUPF LightUPF
|
||||
"UPF_TYPE": external["upf_type"].(string), // StandardUPF LightUPF
|
||||
"N3_IP": n3IP,
|
||||
"N3_MASK": n3Mask,
|
||||
"N3_GW": external["upfn3_gw"].(string),
|
||||
"N3_PCI": "0000:00:00.0",
|
||||
"N3_MAC": "00:00:00:00:00:00",
|
||||
"N3_PCI": external["upfn3_pci"].(string),
|
||||
"N3_MAC": external["upfn3_mac"].(string),
|
||||
"N6_IP": n6IP,
|
||||
"N6_MASK": n6Mask,
|
||||
"N6_GW": external["upfn6_gw"].(string),
|
||||
"N6_PCI": "0000:00:00.0",
|
||||
"N6_MAC": "00:00:00:00:00:00",
|
||||
"N6_PCI": external["upfn6_pci"].(string),
|
||||
"N6_MAC": external["upfn6_mac"].(string),
|
||||
|
||||
"SIP_IP": "192.168.8.110",
|
||||
"SIP_IP": external["ims_sip_ip"].(string),
|
||||
|
||||
"S1_MMEIP": "192.168.8.220",
|
||||
"S11_MMEIP": "172.16.5.220",
|
||||
"S10_MMEIP": "172.16.5.221",
|
||||
"S1_MMEIP": external["mmes1_ip"].(string),
|
||||
"S11_MMEIP": external["mmes11_ip"].(string),
|
||||
"S10_MMEIP": external["mmes10_ip"].(string),
|
||||
|
||||
// sbi
|
||||
"OMC_IP": sbi["omc_ip"].(string),
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/utils/file"
|
||||
"be.ems/src/framework/utils/ssh"
|
||||
"be.ems/src/modules/network_element/model"
|
||||
"be.ems/src/modules/network_element/repository"
|
||||
)
|
||||
@@ -87,6 +88,14 @@ func (r *NeVersionImpl) SelectByNeTypeAndNeID(neType, neId string) model.NeVersi
|
||||
//
|
||||
// action 安装行为:install upgrade rollback
|
||||
func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error) {
|
||||
// 网元主机的SSH客户端
|
||||
sshClient, err := NewNeInfoImpl.NeRunSSHclient(neVersion.NeType, neVersion.NeId)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer sshClient.Close()
|
||||
|
||||
// ========= 文件传输阶段 =========
|
||||
softwarePath := neVersion.Path
|
||||
if action == "install" || action == "upgrade" {
|
||||
softwarePath = neVersion.NewPath
|
||||
@@ -94,68 +103,106 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
|
||||
if action == "rollback" {
|
||||
softwarePath = neVersion.PrePath
|
||||
}
|
||||
// 检查文件是否存在
|
||||
localFilePath := file.ParseUploadFilePath(softwarePath)
|
||||
if _, err := os.Stat(localFilePath); err != nil {
|
||||
return "", fmt.Errorf("file read failure")
|
||||
}
|
||||
fileName := filepath.Base(softwarePath)
|
||||
if strings.Contains(fileName, "*") {
|
||||
fileName = strings.ReplaceAll(fileName, "*", "_")
|
||||
}
|
||||
nePath := "/tmp"
|
||||
neFilePath := fmt.Sprintf("%s/%s", nePath, fileName)
|
||||
|
||||
// 网元信息
|
||||
neInfo := NewNeInfoImpl.SelectNeInfoByNeTypeAndNeID(neVersion.NeType, neVersion.NeId)
|
||||
if neInfo.NeId != neVersion.NeId {
|
||||
return "", fmt.Errorf("error found neinfo")
|
||||
}
|
||||
|
||||
// 网元主机的SSH客户端
|
||||
sshClient, err := NewNeInfoImpl.NeRunSSHclient(neVersion.NeType, neVersion.NeId)
|
||||
neFilePaths, err := r.operateFile(sshClient, softwarePath)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer sshClient.Close()
|
||||
// 网元主机的SSH客户端进行文件传输
|
||||
sftpClient, err := sshClient.NewClientSFTP()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer sftpClient.Close()
|
||||
|
||||
// 上传软件包到 /tmp
|
||||
if err = sftpClient.CopyFileLocalToRemote(localFilePath, neFilePath); err != nil {
|
||||
return "", fmt.Errorf("error uploading package")
|
||||
}
|
||||
|
||||
// ========= 安装时设置 =========
|
||||
if action == "install" {
|
||||
// ========= 网元公共配置文件 start =========
|
||||
// 网元公共配置文件
|
||||
para5GMap, err := NewNeInfoImpl.NeConfPara5GRead()
|
||||
if para5GMap == nil || err != nil {
|
||||
return "", fmt.Errorf("error read para5G file info")
|
||||
}
|
||||
if err := NewNeInfoImpl.NeConfPara5GWirte(para5GMap, []string{fmt.Sprintf("%s@%s", neInfo.NeType, neInfo.NeId)}); err != nil {
|
||||
if err := NewNeInfoImpl.NeConfPara5GWirte(para5GMap, []string{fmt.Sprintf("%s@%s", neVersion.NeType, neVersion.NeId)}); err != nil {
|
||||
return "", fmt.Errorf("error wirte para5G file info")
|
||||
}
|
||||
// ========= 网元公共配置文件 end ===========
|
||||
}
|
||||
|
||||
// ========= 安装命令 start =========
|
||||
neTypeLower := strings.ToLower(neInfo.NeType)
|
||||
// ========= 命令生成阶段 =========
|
||||
okFlagStr, cmdStrArr, err := r.operateCommand(action, neVersion.NeType, neFilePaths)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
// 操作自己omc时
|
||||
if neVersion.NeType == "OMC" {
|
||||
return sshClient.RunCMD(fmt.Sprintf("nohup sh -c \"sleep 3s && %s\" > /dev/null 2>&1 & \n", strings.Join(cmdStrArr, " && ")))
|
||||
}
|
||||
|
||||
// ========= 执行阶段 =========
|
||||
commandLine, err := r.operateRun(sshClient, preinput, cmdStrArr, neVersion.NeType, okFlagStr)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
// ========= 完成阶段 =========
|
||||
if strings.LastIndex(commandLine, okFlagStr) > 5 {
|
||||
if err := r.operateDome(action, neVersion); err != nil {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
return commandLine, nil
|
||||
}
|
||||
|
||||
// operateDome 操作版本-文件传输阶段
|
||||
func (r *NeVersionImpl) operateFile(sshClient *ssh.ConnSSH, softwarePath string) ([]string, error) {
|
||||
// 网元主机的SSH客户端进行文件传输
|
||||
sftpClient, err := sshClient.NewClientSFTP()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer sftpClient.Close()
|
||||
|
||||
nePath := "/tmp"
|
||||
copyFileToNeMap := map[string]string{}
|
||||
|
||||
// 统一处理多个文件和单个文件的情况
|
||||
var softwarePaths []string
|
||||
if strings.Contains(softwarePath, ",") {
|
||||
softwarePaths = strings.Split(softwarePath, ",")
|
||||
} else {
|
||||
softwarePaths = []string{softwarePath}
|
||||
}
|
||||
|
||||
for _, path := range softwarePaths {
|
||||
// 检查文件是否存在
|
||||
localFilePath := file.ParseUploadFilePath(path)
|
||||
if _, err := os.Stat(localFilePath); err != nil {
|
||||
return nil, fmt.Errorf("file read failure")
|
||||
}
|
||||
|
||||
fileName := filepath.Base(path)
|
||||
neFilePath := fmt.Sprintf("%s/%s", nePath, fileName)
|
||||
copyFileToNeMap[localFilePath] = neFilePath
|
||||
}
|
||||
|
||||
// 上传软件包到 /tmp
|
||||
neFilePaths := []string{}
|
||||
for k, v := range copyFileToNeMap {
|
||||
if err = sftpClient.CopyFileLocalToRemote(k, v); err != nil {
|
||||
return nil, fmt.Errorf("error uploading package")
|
||||
}
|
||||
neFilePaths = append(neFilePaths, v)
|
||||
}
|
||||
return neFilePaths, nil
|
||||
}
|
||||
|
||||
// operateDome 操作版本-命令生成阶段
|
||||
func (r *NeVersionImpl) operateCommand(action, neType string, neFilePaths []string) (string, []string, error) {
|
||||
neTypeLower := strings.ToLower(neType)
|
||||
// 命令终止结束标记
|
||||
okFlagStr := fmt.Sprintf("%s version %s successful!", neTypeLower, action)
|
||||
// 安装软件包
|
||||
pkgCmdStr := fmt.Sprintf("sudo dpkg -i %s", neFilePath)
|
||||
fileExt := filepath.Ext(strings.ToLower(fileName))
|
||||
pkgCmdStr := fmt.Sprintf("sudo dpkg -i %s", strings.Join(neFilePaths, " "))
|
||||
fileExt := filepath.Ext(strings.ToLower(neFilePaths[0]))
|
||||
if strings.HasSuffix(fileExt, "rpm") {
|
||||
pkgCmdStr = fmt.Sprintf("sudo rpm -Uvh %s", neFilePath)
|
||||
pkgCmdStr = fmt.Sprintf("sudo rpm -Uvh %s", strings.Join(neFilePaths, " "))
|
||||
}
|
||||
|
||||
// 组合命令输入
|
||||
cmdStrArr := []string{}
|
||||
if neInfo.NeType == "OMC" {
|
||||
if neType == "OMC" {
|
||||
cmdStrArr = append(cmdStrArr, pkgCmdStr)
|
||||
if action == "install" {
|
||||
cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/setomc.sh -m install") // 初始化数据库
|
||||
@@ -164,11 +211,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
|
||||
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 3s && %s\" > /dev/null 2>&1 & \n", strings.Join(cmdStrArr, " && ")))
|
||||
} else if neInfo.NeType == "IMS" {
|
||||
if !strings.Contains(strings.ToLower(fileName), "ims") {
|
||||
return "", fmt.Errorf("error file package not ims")
|
||||
}
|
||||
} else if neType == "IMS" {
|
||||
if action == "install" {
|
||||
para5GData := NewNeInfoImpl.Para5GData
|
||||
cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n")
|
||||
@@ -180,24 +223,26 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
|
||||
// IWF连接PCF服务
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/iwf/iwf_conf.yaml \n", para5GData["PCF_IP"]))
|
||||
// HOST
|
||||
mnc_mcc := fmt.Sprintf("mnc%s.mcc%s", para5GData["MNC_DOMAIN"], para5GData["MCC"])
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s ims' /etc/hosts || echo '%s ims' | sudo tee -a /etc/hosts \n", para5GData["IMS_IP"], para5GData["IMS_IP"]))
|
||||
hssHost := fmt.Sprintf("%s hss.ims.%s.3gppnetwork.org ims", para5GData["UDM_IP"], mnc_mcc)
|
||||
mnc_mcc := fmt.Sprintf("mnc%s.mcc%s", para5GData["MNC_DOMAIN"], para5GData["MCC"])
|
||||
hssHost := fmt.Sprintf("%s hss.ims.%s.3gppnetwork.org hss", para5GData["UDM_IP"], mnc_mcc)
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", hssHost, hssHost))
|
||||
pcrfHost := fmt.Sprintf("%s pcrf.epc.%s.3gppnetwork.org ims\n", para5GData["IMS_IP"], mnc_mcc)
|
||||
pcrfHost := fmt.Sprintf("%s pcrf.epc.%s.3gppnetwork.org pcrf\n", para5GData["IMS_IP"], mnc_mcc)
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", pcrfHost, pcrfHost))
|
||||
imsOrgHost := fmt.Sprintf("ims.%s.3gppnetwork.org", mnc_mcc)
|
||||
imsHost := fmt.Sprintf("%s %s", para5GData["SIP_IP"], imsOrgHost)
|
||||
imsHost := fmt.Sprintf("%s %s ims", para5GData["SIP_IP"], imsOrgHost)
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", imsHost, imsHost))
|
||||
pcscfHost := fmt.Sprintf("%s pcscf.%s", para5GData["SIP_IP"], imsOrgHost)
|
||||
pcscfHost := fmt.Sprintf("%s pcscf.%s pcscf", para5GData["SIP_IP"], imsOrgHost)
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", pcscfHost, pcscfHost))
|
||||
icscfHost := fmt.Sprintf("%s icscf.%s", para5GData["SIP_IP"], imsOrgHost)
|
||||
icscfHost := fmt.Sprintf("%s icscf.%s icscf", para5GData["SIP_IP"], imsOrgHost)
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", icscfHost, icscfHost))
|
||||
scscfHost := fmt.Sprintf("%s scscf.%s", para5GData["SIP_IP"], imsOrgHost)
|
||||
scscfHost := fmt.Sprintf("%s scscf.%s scscf", para5GData["SIP_IP"], imsOrgHost)
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", scscfHost, scscfHost))
|
||||
mmtelHost := fmt.Sprintf("%s mmtel.%s", para5GData["SIP_IP"], imsOrgHost)
|
||||
mmtelHost := fmt.Sprintf("%s mmtel.%s mmtel", para5GData["SIP_IP"], imsOrgHost)
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", mmtelHost, mmtelHost))
|
||||
smsHost := fmt.Sprintf("%s sms.%s", para5GData["SIP_IP"], imsOrgHost)
|
||||
mrfcHost := fmt.Sprintf("%s mrfc.%s mrfc", para5GData["SIP_IP"], imsOrgHost)
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", mrfcHost, mrfcHost))
|
||||
smsHost := fmt.Sprintf("%s smsc.%s smsc", para5GData["SIP_IP"], imsOrgHost)
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", smsHost, smsHost))
|
||||
|
||||
// 30s后停止服务
|
||||
@@ -230,6 +275,7 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.200/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["LMF_IP"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.210/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["NEF_IP"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/- internet/- %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["DNN_DATA"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s n2' /etc/hosts || echo '%s n2' | sudo tee -a /etc/hosts \n", para5GData["N2_IP"], para5GData["N2_IP"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s amf' /etc/hosts || echo '%s amf' | sudo tee -a /etc/hosts \n", para5GData["AMF_IP"], para5GData["AMF_IP"]))
|
||||
}
|
||||
// AUSF配置修改
|
||||
@@ -266,6 +312,8 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["SD"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: internet/dnn: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["DNN_DATA"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: ims/dnn: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["DNN_IMS"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/serviceSelection: 'internet'/serviceSelection: '%s'/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_DATA"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/serviceSelection: 'ims'serviceSelection: '%s'/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_IMS"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: internet/dnn: %s/g\" /usr/local/etc/udm/dnn.yaml \n", para5GData["DNN_DATA"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/dnn: ims/dnn: %s/g\" /usr/local/etc/udm/dnn.yaml \n", para5GData["DNN_IMS"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.18.81/%s/g\" /usr/local/etc/udm/as.yaml \n", para5GData["SIP_IP"]))
|
||||
@@ -332,6 +380,8 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
|
||||
cmdStrArr = append(cmdStrArr, "sudo sed -i 's/driverType: vmxnet3/driverType: \"\"/g' /usr/local/etc/upf/upfForwarder_1.yaml \n")
|
||||
}
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s upf' /etc/hosts || echo '%s upf' | sudo tee -a /etc/hosts \n", para5GData["UPF_IP"], para5GData["UPF_IP"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s upfn3' /etc/hosts || echo '%s upfn3' | sudo tee -a /etc/hosts \n", para5GData["N3_IP"], para5GData["N3_IP"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s upfn6' /etc/hosts || echo '%s upfn6' | sudo tee -a /etc/hosts \n", para5GData["N6_IP"], para5GData["N6_IP"]))
|
||||
}
|
||||
|
||||
// NRF配置修改
|
||||
@@ -354,11 +404,9 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
|
||||
// MME配置修改 - 4G
|
||||
if neTypeLower == "mme" {
|
||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/mme/default/mme.conf /usr/local/etc/mme/mme.conf \n")
|
||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/epsApn.yaml /usr/local/etc/udm/epsApn.yaml \n")
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["AMF_IP"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["SMF_IP"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|192.168.8.220/20|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S1_MMEIP"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|192.168.8.220|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S1_MMEIP"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.220/24|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S11_MMEIP"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|172.16.5.221/24|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["S10_MMEIP"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MNC_DOMAIN"], para5GData["MCC"]))
|
||||
@@ -366,12 +414,9 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MCC=\"001\" ; MNC=\"01\";/MCC=\"%s\" ; MNC=\"%s\";/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MCC"], para5GData["MNC"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/TAC = \"1\";/TAC = \"%s\";/g\" /usr/local/etc/mme/mme.conf \n", para5GData["TAC"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/TAC = 1;/TAC = %s;/g\" /usr/local/etc/mme/mme.conf \n", para5GData["TAC"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/internet/%s/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_DATA"]))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/ims/%s/g\" /usr/local/etc/udm/epsApn.yaml \n", para5GData["DNN_IMS"]))
|
||||
// SMF开启
|
||||
cmdStrArr = append(cmdStrArr, "sudo sed -i \"/^ *gxcfg:/,/^ *[^ ]/{s/enable: false/enable: true/;b};\" /usr/local/etc/smf/smf_conf.yaml \n")
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s mme' /etc/hosts || echo '%s mme' | sudo tee -a /etc/hosts \n", para5GData["S11_MMEIP"], para5GData["S11_MMEIP"]))
|
||||
|
||||
}
|
||||
// N3IWF配置修改
|
||||
if neTypeLower == "n3iwf" {
|
||||
@@ -399,22 +444,26 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
|
||||
}
|
||||
|
||||
// 删除软件包
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo rm %s \n", neFilePath))
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo rm %s \n", strings.Join(neFilePaths, " ")))
|
||||
// 结束
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("echo '%s' \n", okFlagStr))
|
||||
// ========= 安装命令 end =========
|
||||
|
||||
return okFlagStr, cmdStrArr, nil
|
||||
}
|
||||
|
||||
// operateDome 操作版本-执行阶段
|
||||
func (r *NeVersionImpl) operateRun(sshClient *ssh.ConnSSH, preinput map[string]string, cmdStrArr []string, neType string, okFlagStr string) (string, error) {
|
||||
// ssh连接会话
|
||||
clientSession, err := sshClient.NewClientSession(80, 24)
|
||||
clientSession, err := sshClient.NewClientSession(127, 42)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("neinfo ssh client session new err")
|
||||
}
|
||||
defer clientSession.Close()
|
||||
|
||||
firstRead := true // 首次命令进行记录日志信息
|
||||
logMsg := "" // 日志信息
|
||||
commandLineText := "" // 日志信息
|
||||
done := make(chan bool) // 完成信号
|
||||
// 超时退出 30s
|
||||
// 超时退出 60s
|
||||
timeoutTicker := time.NewTicker(60 * time.Second)
|
||||
defer timeoutTicker.Stop()
|
||||
// 实时读取SSH消息直接输出
|
||||
@@ -432,10 +481,10 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
|
||||
outputStr := string(outputByte)
|
||||
// 非首次进行记录命令
|
||||
if !firstRead {
|
||||
logMsg += outputStr
|
||||
commandLineText += outputStr
|
||||
}
|
||||
// IMS预输入 P/I/S-CSCF Config 配置覆盖
|
||||
if neVersion.NeType == "IMS" && strings.Contains(outputStr, "(P/I/S-CSCF Config)? <y/n>") {
|
||||
if neType == "IMS" && strings.Contains(outputStr, "(P/I/S-CSCF Config)? <y/n>") {
|
||||
if pisCSCF, ok := preinput["pisCSCF"]; ok && pisCSCF != "" {
|
||||
clientSession.Write(fmt.Sprintf("%s \n", pisCSCF))
|
||||
} else {
|
||||
@@ -465,56 +514,63 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
|
||||
// 等待写入协程完成
|
||||
<-done
|
||||
|
||||
// 执行到最后语句
|
||||
if strings.LastIndex(logMsg, okFlagStr) > 5 {
|
||||
if action == "install" {
|
||||
// ========= 网元OAM配置文件 start ==========
|
||||
if err := NewNeInfoImpl.NeConfOAMSync(neInfo, nil, true); err != nil {
|
||||
return "", fmt.Errorf("error wirte OAM file info")
|
||||
}
|
||||
// ========= 网元OAM配置文件 end ===========
|
||||
}
|
||||
|
||||
// 更新Version
|
||||
verInfo := NewNeVersionImpl.SelectByNeTypeAndNeID(neVersion.NeType, neVersion.NeId)
|
||||
if verInfo.NeId == neVersion.NeId {
|
||||
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
|
||||
verInfo.Path = neVersion.NewPath
|
||||
verInfo.PreName = curName
|
||||
verInfo.PreVersion = curVersion
|
||||
verInfo.PrePath = curPath
|
||||
verInfo.NewName = "-"
|
||||
verInfo.NewVersion = "-"
|
||||
verInfo.NewPath = "-"
|
||||
}
|
||||
if action == "rollback" {
|
||||
verInfo.Name = neVersion.PreName
|
||||
verInfo.Version = neVersion.PreVersion
|
||||
verInfo.Path = neVersion.PrePath
|
||||
verInfo.PreName = curName
|
||||
verInfo.PreVersion = curVersion
|
||||
verInfo.PrePath = curPath
|
||||
}
|
||||
|
||||
verInfo.Status = "1"
|
||||
NewNeVersionImpl.Update(verInfo)
|
||||
}
|
||||
}
|
||||
return logMsg, nil
|
||||
return commandLineText, nil
|
||||
}
|
||||
|
||||
// operateDome 操作版本-完成阶段
|
||||
func (r *NeVersionImpl) operateDome(action string, neVersion model.NeVersion) error {
|
||||
if action == "install" {
|
||||
// 网元信息
|
||||
neInfo := NewNeInfoImpl.SelectNeInfoByNeTypeAndNeID(neVersion.NeType, neVersion.NeId)
|
||||
if neInfo.NeId != neVersion.NeId {
|
||||
return fmt.Errorf("error found neinfo")
|
||||
}
|
||||
// ========= 网元OAM配置文件 start ==========
|
||||
if err := NewNeInfoImpl.NeConfOAMSync(neInfo, nil, true); err != nil {
|
||||
return fmt.Errorf("error wirte OAM file info")
|
||||
}
|
||||
// ========= 网元OAM配置文件 end ===========
|
||||
}
|
||||
|
||||
// 更新Version
|
||||
verInfo := r.SelectByNeTypeAndNeID(neVersion.NeType, neVersion.NeId)
|
||||
if verInfo.NeId == neVersion.NeId {
|
||||
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
|
||||
verInfo.Path = neVersion.NewPath
|
||||
verInfo.PreName = curName
|
||||
verInfo.PreVersion = curVersion
|
||||
verInfo.PrePath = curPath
|
||||
verInfo.NewName = "-"
|
||||
verInfo.NewVersion = "-"
|
||||
verInfo.NewPath = "-"
|
||||
}
|
||||
if action == "rollback" {
|
||||
verInfo.Name = neVersion.PreName
|
||||
verInfo.Version = neVersion.PreVersion
|
||||
verInfo.Path = neVersion.PrePath
|
||||
verInfo.PreName = curName
|
||||
verInfo.PreVersion = curVersion
|
||||
verInfo.PrePath = curPath
|
||||
}
|
||||
|
||||
verInfo.Status = "1"
|
||||
NewNeVersionImpl.Update(verInfo)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user