perf: 重构网元版本安装命令步骤

This commit is contained in:
TsMask
2024-05-29 16:58:20 +08:00
parent 57a18656df
commit f098409624
2 changed files with 184 additions and 128 deletions

View File

@@ -704,23 +704,23 @@ func (r *NeInfoImpl) neConfPara5GDataConvert(content map[string]any) map[string]
"UE_IP": ueIP, "UE_IP": ueIP,
"UE_MASK": ueMask, "UE_MASK": ueMask,
"UE_CIDR": ueCicr, "UE_CIDR": ueCicr,
"UPF_TYPE": "LightUPF", // StandardUPF LightUPF "UPF_TYPE": external["upf_type"].(string), // StandardUPF LightUPF
"N3_IP": n3IP, "N3_IP": n3IP,
"N3_MASK": n3Mask, "N3_MASK": n3Mask,
"N3_GW": external["upfn3_gw"].(string), "N3_GW": external["upfn3_gw"].(string),
"N3_PCI": "0000:00:00.0", "N3_PCI": external["upfn3_pci"].(string),
"N3_MAC": "00:00:00:00:00:00", "N3_MAC": external["upfn3_mac"].(string),
"N6_IP": n6IP, "N6_IP": n6IP,
"N6_MASK": n6Mask, "N6_MASK": n6Mask,
"N6_GW": external["upfn6_gw"].(string), "N6_GW": external["upfn6_gw"].(string),
"N6_PCI": "0000:00:00.0", "N6_PCI": external["upfn6_pci"].(string),
"N6_MAC": "00:00:00:00:00:00", "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", "S1_MMEIP": external["mmes1_ip"].(string),
"S11_MMEIP": "172.16.5.220", "S11_MMEIP": external["mmes11_ip"].(string),
"S10_MMEIP": "172.16.5.221", "S10_MMEIP": external["mmes10_ip"].(string),
// sbi // sbi
"OMC_IP": sbi["omc_ip"].(string), "OMC_IP": sbi["omc_ip"].(string),

View File

@@ -8,6 +8,7 @@ import (
"time" "time"
"be.ems/src/framework/utils/file" "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/model"
"be.ems/src/modules/network_element/repository" "be.ems/src/modules/network_element/repository"
) )
@@ -87,6 +88,14 @@ func (r *NeVersionImpl) SelectByNeTypeAndNeID(neType, neId string) model.NeVersi
// //
// action 安装行为install 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) {
// 网元主机的SSH客户端
sshClient, err := NewNeInfoImpl.NeRunSSHclient(neVersion.NeType, neVersion.NeId)
if err != nil {
return "", err
}
defer sshClient.Close()
// ========= 文件传输阶段 =========
softwarePath := neVersion.Path softwarePath := neVersion.Path
if action == "install" || action == "upgrade" { if action == "install" || action == "upgrade" {
softwarePath = neVersion.NewPath softwarePath = neVersion.NewPath
@@ -94,68 +103,106 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
if action == "rollback" { if action == "rollback" {
softwarePath = neVersion.PrePath softwarePath = neVersion.PrePath
} }
// 检查文件是否存在 neFilePaths, err := r.operateFile(sshClient, softwarePath)
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)
if err != nil { if err != nil {
return "", err 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" { if action == "install" {
// ========= 网元公共配置文件 start ========= // 网元公共配置文件
para5GMap, err := NewNeInfoImpl.NeConfPara5GRead() para5GMap, err := NewNeInfoImpl.NeConfPara5GRead()
if para5GMap == nil || err != nil { if para5GMap == nil || err != nil {
return "", fmt.Errorf("error read para5G file info") 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") 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) okFlagStr := fmt.Sprintf("%s version %s successful!", neTypeLower, action)
// 安装软件包 // 安装软件包
pkgCmdStr := fmt.Sprintf("sudo dpkg -i %s", neFilePath) pkgCmdStr := fmt.Sprintf("sudo dpkg -i %s", strings.Join(neFilePaths, " "))
fileExt := filepath.Ext(strings.ToLower(fileName)) fileExt := filepath.Ext(strings.ToLower(neFilePaths[0]))
if strings.HasSuffix(fileExt, "rpm") { 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{} cmdStrArr := []string{}
if neInfo.NeType == "OMC" { if neType == "OMC" {
cmdStrArr = append(cmdStrArr, pkgCmdStr) cmdStrArr = append(cmdStrArr, pkgCmdStr)
if action == "install" { if action == "install" {
cmdStrArr = append(cmdStrArr, "sudo /usr/local/omc/bin/setomc.sh -m 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/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 3s && %s\" > /dev/null 2>&1 & \n", strings.Join(cmdStrArr, " && "))) } else if neType == "IMS" {
} else if neInfo.NeType == "IMS" {
if !strings.Contains(strings.ToLower(fileName), "ims") {
return "", fmt.Errorf("error file package not ims")
}
if action == "install" { if action == "install" {
para5GData := NewNeInfoImpl.Para5GData para5GData := NewNeInfoImpl.Para5GData
cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n") cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n")
@@ -180,24 +223,26 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
// IWF连接PCF服务 // 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"])) 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 // 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"])) 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)) 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)) 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) 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)) 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)) 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)) 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)) 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)) 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)) cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", smsHost, smsHost))
// 30s后停止服务 // 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.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/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("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"])) 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配置修改 // 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/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: 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/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: 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/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"])) 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, "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 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配置修改 // NRF配置修改
@@ -354,11 +404,9 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
// MME配置修改 - 4G // MME配置修改 - 4G
if neTypeLower == "mme" { 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/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.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/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/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.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|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"])) 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/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/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开启 // 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, "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"])) 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配置修改 // N3IWF配置修改
if neTypeLower == "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)) 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连接会话 // ssh连接会话
clientSession, err := sshClient.NewClientSession(80, 24) clientSession, err := sshClient.NewClientSession(127, 42)
if err != nil { if err != nil {
return "", fmt.Errorf("neinfo ssh client session new err") return "", fmt.Errorf("neinfo ssh client session new err")
} }
defer clientSession.Close() defer clientSession.Close()
firstRead := true // 首次命令进行记录日志信息 firstRead := true // 首次命令进行记录日志信息
logMsg := "" // 日志信息 commandLineText := "" // 日志信息
done := make(chan bool) // 完成信号 done := make(chan bool) // 完成信号
// 超时退出 30s // 超时退出 60s
timeoutTicker := time.NewTicker(60 * time.Second) timeoutTicker := time.NewTicker(60 * time.Second)
defer timeoutTicker.Stop() defer timeoutTicker.Stop()
// 实时读取SSH消息直接输出 // 实时读取SSH消息直接输出
@@ -432,10 +481,10 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
outputStr := string(outputByte) outputStr := string(outputByte)
// 非首次进行记录命令 // 非首次进行记录命令
if !firstRead { if !firstRead {
logMsg += outputStr commandLineText += outputStr
} }
// IMS预输入 P/I/S-CSCF Config 配置覆盖 // 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 != "" { if pisCSCF, ok := preinput["pisCSCF"]; ok && pisCSCF != "" {
clientSession.Write(fmt.Sprintf("%s \n", pisCSCF)) clientSession.Write(fmt.Sprintf("%s \n", pisCSCF))
} else { } else {
@@ -465,56 +514,63 @@ func (r *NeVersionImpl) Operate(action string, neVersion model.NeVersion, preinp
// 等待写入协程完成 // 等待写入协程完成
<-done <-done
// 执行到最后语句 return commandLineText, nil
if strings.LastIndex(logMsg, okFlagStr) > 5 { }
if action == "install" {
// ========= 网元OAM配置文件 start ========== // operateDome 操作版本-完成阶段
if err := NewNeInfoImpl.NeConfOAMSync(neInfo, nil, true); err != nil { func (r *NeVersionImpl) operateDome(action string, neVersion model.NeVersion) error {
return "", fmt.Errorf("error wirte OAM file info") if action == "install" {
} // 网元信息
// ========= 网元OAM配置文件 end =========== neInfo := NewNeInfoImpl.SelectNeInfoByNeTypeAndNeID(neVersion.NeType, neVersion.NeId)
} if neInfo.NeId != neVersion.NeId {
return fmt.Errorf("error found neinfo")
// 更新Version }
verInfo := NewNeVersionImpl.SelectByNeTypeAndNeID(neVersion.NeType, neVersion.NeId) // ========= 网元OAM配置文件 start ==========
if verInfo.NeId == neVersion.NeId { if err := NewNeInfoImpl.NeConfOAMSync(neInfo, nil, true); err != nil {
curName := verInfo.Name return fmt.Errorf("error wirte OAM file info")
curVersion := verInfo.Version }
curPath := verInfo.Path // ========= 网元OAM配置文件 end ===========
if action == "install" { }
verInfo.Name = neVersion.NewName
verInfo.Version = neVersion.NewVersion // 更新Version
verInfo.Path = neVersion.NewPath verInfo := r.SelectByNeTypeAndNeID(neVersion.NeType, neVersion.NeId)
verInfo.PreName = "-" if verInfo.NeId == neVersion.NeId {
verInfo.PreVersion = "-" curName := verInfo.Name
verInfo.PrePath = "-" curVersion := verInfo.Version
verInfo.NewName = "-" curPath := verInfo.Path
verInfo.NewVersion = "-" if action == "install" {
verInfo.NewPath = "-" verInfo.Name = neVersion.NewName
} verInfo.Version = neVersion.NewVersion
if action == "upgrade" { verInfo.Path = neVersion.NewPath
verInfo.Name = neVersion.NewName verInfo.PreName = "-"
verInfo.Version = neVersion.NewVersion verInfo.PreVersion = "-"
verInfo.Path = neVersion.NewPath verInfo.PrePath = "-"
verInfo.PreName = curName verInfo.NewName = "-"
verInfo.PreVersion = curVersion verInfo.NewVersion = "-"
verInfo.PrePath = curPath verInfo.NewPath = "-"
verInfo.NewName = "-" }
verInfo.NewVersion = "-" if action == "upgrade" {
verInfo.NewPath = "-" verInfo.Name = neVersion.NewName
} verInfo.Version = neVersion.NewVersion
if action == "rollback" { verInfo.Path = neVersion.NewPath
verInfo.Name = neVersion.PreName verInfo.PreName = curName
verInfo.Version = neVersion.PreVersion verInfo.PreVersion = curVersion
verInfo.Path = neVersion.PrePath verInfo.PrePath = curPath
verInfo.PreName = curName verInfo.NewName = "-"
verInfo.PreVersion = curVersion verInfo.NewVersion = "-"
verInfo.PrePath = curPath verInfo.NewPath = "-"
} }
if action == "rollback" {
verInfo.Status = "1" verInfo.Name = neVersion.PreName
NewNeVersionImpl.Update(verInfo) verInfo.Version = neVersion.PreVersion
} verInfo.Path = neVersion.PrePath
} verInfo.PreName = curName
return logMsg, nil verInfo.PreVersion = curVersion
verInfo.PrePath = curPath
}
verInfo.Status = "1"
NewNeVersionImpl.Update(verInfo)
}
return nil
} }