feat: 更新多个模块以支持新的数据结构和日志格式
This commit is contained in:
@@ -7,8 +7,8 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/ssh"
|
||||
"be.ems/src/framework/utils/file"
|
||||
"be.ems/src/framework/utils/ssh"
|
||||
neFetchlink "be.ems/src/modules/network_element/fetch_link"
|
||||
"be.ems/src/modules/network_element/model"
|
||||
"be.ems/src/modules/network_element/repository"
|
||||
@@ -17,29 +17,30 @@ import (
|
||||
// 实例化服务层 NeVersion 结构体
|
||||
var NewNeVersion = &NeVersion{
|
||||
neVersionRepository: repository.NewNeVersion,
|
||||
neInfoService: NewNeInfo,
|
||||
}
|
||||
|
||||
// NeVersion 网元版本信息 服务层处理
|
||||
type NeVersion struct {
|
||||
neVersionRepository *repository.NeVersion // 网元版本信息表
|
||||
neInfoService *NeInfo // 网元信息数据信息
|
||||
}
|
||||
|
||||
// SelectNeHostPage 分页查询列表数据
|
||||
func (r *NeVersion) SelectPage(query map[string]any, checkVersion bool) map[string]any {
|
||||
data := r.neVersionRepository.SelectPage(query)
|
||||
// FindByPage 分页查询列表数据
|
||||
func (r NeVersion) FindByPage(query map[string]string, checkVersion bool) ([]model.NeVersion, int64) {
|
||||
rows, total := r.neVersionRepository.SelectByPage(query)
|
||||
|
||||
// 网元直连检查更新网元服务版本
|
||||
if checkVersion {
|
||||
rows := data["rows"].([]model.NeVersion)
|
||||
r.checkNeVersion(&rows)
|
||||
}
|
||||
|
||||
return data
|
||||
return rows, total
|
||||
}
|
||||
|
||||
// SelectConfigList 查询列表
|
||||
func (r *NeVersion) SelectList(neVersion model.NeVersion, checkVersion bool) []model.NeVersion {
|
||||
list := r.neVersionRepository.SelectList(neVersion)
|
||||
// Find 查询列表
|
||||
func (r NeVersion) Find(neVersion model.NeVersion, checkVersion bool) []model.NeVersion {
|
||||
list := r.neVersionRepository.Select(neVersion)
|
||||
|
||||
// 网元直连检查更新网元服务版本
|
||||
if checkVersion {
|
||||
@@ -50,11 +51,11 @@ func (r *NeVersion) SelectList(neVersion model.NeVersion, checkVersion bool) []m
|
||||
}
|
||||
|
||||
// checkNeVersion 网元列表检查更新网元版本
|
||||
func (r *NeVersion) checkNeVersion(arr *[]model.NeVersion) {
|
||||
func (r NeVersion) checkNeVersion(arr *[]model.NeVersion) {
|
||||
for i := range *arr {
|
||||
item := (*arr)[i]
|
||||
// 查询网元获取IP
|
||||
neInfo := NewNeInfo.SelectNeInfoByNeTypeAndNeID(item.NeType, item.NeId)
|
||||
neInfo := r.neInfoService.FindByNeTypeAndNeID(item.NeType, item.NeId)
|
||||
if neInfo.NeId != item.NeId || neInfo.IP == "" {
|
||||
continue
|
||||
}
|
||||
@@ -80,12 +81,12 @@ func (r *NeVersion) checkNeVersion(arr *[]model.NeVersion) {
|
||||
}
|
||||
}
|
||||
|
||||
// SelectByIds 通过ID查询
|
||||
func (r *NeVersion) SelectById(id string) model.NeVersion {
|
||||
if id == "" {
|
||||
// FindById 通过ID查询
|
||||
func (r NeVersion) FindById(id int64) model.NeVersion {
|
||||
if id <= 0 {
|
||||
return model.NeVersion{}
|
||||
}
|
||||
neVersions := r.neVersionRepository.SelectByIds([]string{id})
|
||||
neVersions := r.neVersionRepository.SelectByIds([]int64{id})
|
||||
if len(neVersions) > 0 {
|
||||
return neVersions[0]
|
||||
}
|
||||
@@ -93,17 +94,17 @@ func (r *NeVersion) SelectById(id string) model.NeVersion {
|
||||
}
|
||||
|
||||
// Insert 新增信息
|
||||
func (r *NeVersion) Insert(neVersion model.NeVersion) string {
|
||||
func (r NeVersion) Insert(neVersion model.NeVersion) int64 {
|
||||
return r.neVersionRepository.Insert(neVersion)
|
||||
}
|
||||
|
||||
// Update 修改信息
|
||||
func (r *NeVersion) Update(neVersion model.NeVersion) int64 {
|
||||
func (r NeVersion) Update(neVersion model.NeVersion) int64 {
|
||||
return r.neVersionRepository.Update(neVersion)
|
||||
}
|
||||
|
||||
// DeleteByIds 批量删除信息
|
||||
func (r *NeVersion) DeleteByIds(ids []string) (int64, error) {
|
||||
func (r NeVersion) DeleteByIds(ids []int64) (int64, error) {
|
||||
// 检查是否存在
|
||||
rowIds := r.neVersionRepository.SelectByIds(ids)
|
||||
if len(rowIds) <= 0 {
|
||||
@@ -118,9 +119,9 @@ func (r *NeVersion) DeleteByIds(ids []string) (int64, error) {
|
||||
return 0, fmt.Errorf("delete fail")
|
||||
}
|
||||
|
||||
// SelectByNeTypeAndNeID 通过网元类型和网元ID查询
|
||||
func (r *NeVersion) SelectByNeTypeAndNeID(neType, neId string) model.NeVersion {
|
||||
neVersions := r.neVersionRepository.SelectList(model.NeVersion{
|
||||
// FindByNeTypeAndNeID 通过网元类型和网元ID查询
|
||||
func (r NeVersion) FindByNeTypeAndNeID(neType, neId string) model.NeVersion {
|
||||
neVersions := r.neVersionRepository.Select(model.NeVersion{
|
||||
NeType: neType,
|
||||
NeId: neId,
|
||||
})
|
||||
@@ -133,9 +134,9 @@ func (r *NeVersion) SelectByNeTypeAndNeID(neType, neId string) model.NeVersion {
|
||||
// Operate 操作版本上传到网元主机执行命令
|
||||
//
|
||||
// action 安装行为:install upgrade rollback
|
||||
func (r *NeVersion) Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error) {
|
||||
func (r NeVersion) Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error) {
|
||||
// 网元主机的SSH客户端
|
||||
sshClient, err := NewNeInfo.NeRunSSHClient(neVersion.NeType, neVersion.NeId)
|
||||
sshClient, err := r.neInfoService.NeRunSSHClient(neVersion.NeType, neVersion.NeId)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -157,11 +158,11 @@ func (r *NeVersion) Operate(action string, neVersion model.NeVersion, preinput m
|
||||
// ========= 安装时设置 =========
|
||||
if action == "install" {
|
||||
// 网元公共配置文件
|
||||
para5GMap, err := NewNeInfo.NeConfPara5GRead()
|
||||
para5GMap, err := r.neInfoService.NeConfPara5GRead()
|
||||
if para5GMap == nil || err != nil {
|
||||
return "", fmt.Errorf("error read para5G file info")
|
||||
}
|
||||
if err := NewNeInfo.NeConfPara5GWirte(para5GMap, []string{fmt.Sprintf("%s@%s", neVersion.NeType, neVersion.NeId)}); err != nil {
|
||||
if err := r.neInfoService.NeConfPara5GWirte(para5GMap, []string{fmt.Sprintf("%s@%s", neVersion.NeType, neVersion.NeId)}); err != nil {
|
||||
return "", fmt.Errorf("error wirte para5G file info")
|
||||
}
|
||||
}
|
||||
@@ -188,7 +189,7 @@ func (r *NeVersion) Operate(action string, neVersion model.NeVersion, preinput m
|
||||
}
|
||||
|
||||
// operateFile 操作版本-文件传输阶段
|
||||
func (r *NeVersion) operateFile(sshClient *ssh.ConnSSH, softwarePath string) ([]string, error) {
|
||||
func (r NeVersion) operateFile(sshClient *ssh.ConnSSH, softwarePath string) ([]string, error) {
|
||||
// 网元主机的SSH客户端进行文件传输
|
||||
sftpClient, err := sshClient.NewClientSFTP()
|
||||
if err != nil {
|
||||
@@ -209,7 +210,7 @@ func (r *NeVersion) operateFile(sshClient *ssh.ConnSSH, softwarePath string) ([]
|
||||
|
||||
for _, path := range softwarePaths {
|
||||
// 检查文件是否存在
|
||||
localFilePath := file.ParseUploadFilePath(path)
|
||||
localFilePath := file.ParseUploadFileAbsPath(path)
|
||||
if _, err := os.Stat(localFilePath); err != nil {
|
||||
return nil, fmt.Errorf("file read failure")
|
||||
}
|
||||
@@ -231,7 +232,7 @@ func (r *NeVersion) operateFile(sshClient *ssh.ConnSSH, softwarePath string) ([]
|
||||
}
|
||||
|
||||
// operateCommand 操作版本-命令生成阶段
|
||||
func (r *NeVersion) operateCommand(action, neType string, neFilePaths []string) (string, []string, error) {
|
||||
func (r NeVersion) operateCommand(action, neType string, neFilePaths []string) (string, []string, error) {
|
||||
neTypeLower := strings.ToLower(neType)
|
||||
// 命令终止结束标记
|
||||
okFlagStr := fmt.Sprintf("%s version %s successful!", neTypeLower, action)
|
||||
@@ -271,7 +272,7 @@ func (r *NeVersion) operateCommand(action, neType string, neFilePaths []string)
|
||||
return okFlagStr, cmdStrArr, nil
|
||||
} else if neType == "IMS" {
|
||||
if action == "install" {
|
||||
para5GData := NewNeInfo.Para5GData
|
||||
para5GData := r.neInfoService.Para5GData
|
||||
cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n")
|
||||
|
||||
// 公网 PLMN地址
|
||||
@@ -313,7 +314,7 @@ func (r *NeVersion) operateCommand(action, neType string, neFilePaths []string)
|
||||
}
|
||||
} else {
|
||||
if action == "install" {
|
||||
para5GData := NewNeInfo.Para5GData
|
||||
para5GData := r.neInfoService.Para5GData
|
||||
cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n")
|
||||
|
||||
// AMF配置修改
|
||||
@@ -560,14 +561,14 @@ func (r *NeVersion) operateCommand(action, neType string, neFilePaths []string)
|
||||
if action == "install" && (neTypeLower == "ims" || neTypeLower == "udm") {
|
||||
// adb
|
||||
if strings.Contains(pkgCmdStr, "adb") {
|
||||
para5GData := NewNeInfo.Para5GData
|
||||
para5GData := r.neInfoService.Para5GData
|
||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/adb/default/adb.conf /usr/local/etc/adb/adb.conf \n")
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/bind 127.0.0.1/bind %s/g\" /usr/local/etc/adb/adb.conf \n", para5GData["DB_IP"]))
|
||||
cmdStrArr = append(cmdStrArr, "sudo service adb restart \n")
|
||||
}
|
||||
// kvdb
|
||||
if strings.Contains(pkgCmdStr, "kvdb") {
|
||||
para5GData := NewNeInfo.Para5GData
|
||||
para5GData := r.neInfoService.Para5GData
|
||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/kvdb/default/kvdb.conf /usr/local/etc/kvdb/kvdb.conf \n")
|
||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/bind 127.0.0.1/bind %s/g\" /usr/local/etc/kvdb/kvdb.conf \n", para5GData["DB_IP"]))
|
||||
cmdStrArr = append(cmdStrArr, "sudo service kvdb restart \n")
|
||||
@@ -583,7 +584,7 @@ func (r *NeVersion) operateCommand(action, neType string, neFilePaths []string)
|
||||
}
|
||||
|
||||
// operateRun 操作版本-执行阶段
|
||||
func (r *NeVersion) operateRun(sshClient *ssh.ConnSSH, preinput map[string]string, cmdStrArr []string, neType string, okFlagStr string) (string, error) {
|
||||
func (r NeVersion) operateRun(sshClient *ssh.ConnSSH, preinput map[string]string, cmdStrArr []string, neType string, okFlagStr string) (string, error) {
|
||||
// ssh连接会话
|
||||
clientSession, err := sshClient.NewClientSession(127, 42)
|
||||
if err != nil {
|
||||
@@ -673,23 +674,23 @@ func (r *NeVersion) operateRun(sshClient *ssh.ConnSSH, preinput map[string]strin
|
||||
}
|
||||
|
||||
// operateDome 操作版本-完成阶段
|
||||
func (r *NeVersion) operateDome(action string, neVersion model.NeVersion) error {
|
||||
func (r NeVersion) operateDome(action string, neVersion model.NeVersion) error {
|
||||
if action == "install" {
|
||||
// 网元信息
|
||||
neInfo := NewNeInfo.SelectNeInfoByNeTypeAndNeID(neVersion.NeType, neVersion.NeId)
|
||||
neInfo := r.neInfoService.FindByNeTypeAndNeID(neVersion.NeType, neVersion.NeId)
|
||||
if neInfo.NeId != neVersion.NeId {
|
||||
return fmt.Errorf("error found neinfo")
|
||||
}
|
||||
|
||||
// ========= 网元OAM配置文件 start ==========
|
||||
if err := NewNeInfo.NeConfOAMWirteSync(neInfo, nil, true); err != nil {
|
||||
if err := r.neInfoService.NeConfOAMWirteSync(neInfo, nil, true); err != nil {
|
||||
return fmt.Errorf("error wirte OAM file info")
|
||||
}
|
||||
// ========= 网元OAM配置文件 end ===========
|
||||
|
||||
// SMSC配置修改 IMS/UDM 配置
|
||||
if neInfo.NeType == "SMSC" {
|
||||
para5GData := NewNeInfo.Para5GData
|
||||
para5GData := r.neInfoService.Para5GData
|
||||
mnc_mcc := fmt.Sprintf("mnc%s.mcc%s", para5GData["MNC_DOMAIN"], para5GData["MCC"])
|
||||
smscHost := fmt.Sprintf("%s smsc.ims.%s.3gppnetwork.org", para5GData["SMSC_IP"], mnc_mcc)
|
||||
smscHostCMD := fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", smscHost, smscHost)
|
||||
@@ -697,30 +698,30 @@ func (r *NeVersion) operateDome(action string, neVersion model.NeVersion) error
|
||||
smsHost := fmt.Sprintf("sudo sed -i '/^%s smsc.*smsc$/c\\' /etc/hosts", para5GData["SIP_IP"])
|
||||
|
||||
// IMS 配置
|
||||
imsNEs := NewNeInfo.SelectList(model.NeInfo{NeType: "IMS"}, false, false)
|
||||
imsNEs := r.neInfoService.Find(model.NeInfo{NeType: "IMS"}, false, false)
|
||||
for _, v := range imsNEs {
|
||||
NewNeInfo.NeRunSSHCmd(v.NeType, v.NeId, smscIPCMD)
|
||||
NewNeInfo.NeRunSSHCmd(v.NeType, v.NeId, smscHostCMD)
|
||||
NewNeInfo.NeRunSSHCmd(v.NeType, v.NeId, smsHost)
|
||||
NewNeInfo.NeRunSSHCmd(v.NeType, v.NeId, "sudo sed -i '/^#!define WITH_SMS/ s/^/#/' /usr/local/etc/ims/vars.cfg")
|
||||
NewNeInfo.NeRunSSHCmd(v.NeType, v.NeId, "ims-stop || true && ims-start")
|
||||
r.neInfoService.NeRunSSHCmd(v.NeType, v.NeId, smscIPCMD)
|
||||
r.neInfoService.NeRunSSHCmd(v.NeType, v.NeId, smscHostCMD)
|
||||
r.neInfoService.NeRunSSHCmd(v.NeType, v.NeId, smsHost)
|
||||
r.neInfoService.NeRunSSHCmd(v.NeType, v.NeId, "sudo sed -i '/^#!define WITH_SMS/ s/^/#/' /usr/local/etc/ims/vars.cfg")
|
||||
r.neInfoService.NeRunSSHCmd(v.NeType, v.NeId, "ims-stop || true && ims-start")
|
||||
}
|
||||
// UDM 配置
|
||||
smscASName := fmt.Sprintf("sudo sed -i \"/- name: 'sms_as'/{n;s|serverName: .*|serverName: 'sip:%s:5060'|}\" /usr/local/etc/udm/as.yaml", para5GData["SMSC_IP"])
|
||||
smscASAddress := fmt.Sprintf("sudo sed -i \"/- name: 'sms_as'/{n;n;n;s|diameterAddress: .*|diameterAddress: 'smsc.ims.%s.3gppnetwork.org'|}\" /usr/local/etc/udm/as.yaml", mnc_mcc)
|
||||
udmNEs := NewNeInfo.SelectList(model.NeInfo{NeType: "UDM"}, false, false)
|
||||
udmNEs := r.neInfoService.Find(model.NeInfo{NeType: "UDM"}, false, false)
|
||||
for _, v := range udmNEs {
|
||||
NewNeInfo.NeRunSSHCmd(v.NeType, v.NeId, smscIPCMD)
|
||||
NewNeInfo.NeRunSSHCmd(v.NeType, v.NeId, smscHostCMD)
|
||||
NewNeInfo.NeRunSSHCmd(v.NeType, v.NeId, smscASName)
|
||||
NewNeInfo.NeRunSSHCmd(v.NeType, v.NeId, smscASAddress)
|
||||
NewNeInfo.NeRunSSHCmd(v.NeType, v.NeId, "sudo service udm restart")
|
||||
r.neInfoService.NeRunSSHCmd(v.NeType, v.NeId, smscIPCMD)
|
||||
r.neInfoService.NeRunSSHCmd(v.NeType, v.NeId, smscHostCMD)
|
||||
r.neInfoService.NeRunSSHCmd(v.NeType, v.NeId, smscASName)
|
||||
r.neInfoService.NeRunSSHCmd(v.NeType, v.NeId, smscASAddress)
|
||||
r.neInfoService.NeRunSSHCmd(v.NeType, v.NeId, "sudo service udm restart")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 更新Version
|
||||
verInfo := r.SelectByNeTypeAndNeID(neVersion.NeType, neVersion.NeId)
|
||||
verInfo := r.FindByNeTypeAndNeID(neVersion.NeType, neVersion.NeId)
|
||||
if verInfo.NeId == neVersion.NeId {
|
||||
curName := verInfo.Name
|
||||
curVersion := verInfo.Version
|
||||
|
||||
Reference in New Issue
Block a user