fix: 优化网元OAM配置读取与写入逻辑,修复键名不一致问题
This commit is contained in:
@@ -474,54 +474,56 @@ func (r *NeInfo) NeRunRedisClient(neType, neId string) (*redis.ConnRedis, error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NeConfOAMReadSync 网元OAM配置文件读取
|
// NeConfOAMReadSync 网元OAM配置文件读取
|
||||||
func (r *NeInfo) NeConfOAMReadSync(neType, neId string) (map[string]any, error) {
|
func (r NeInfo) NeConfOAMReadSync(neType, neId string) (map[string]any, error) {
|
||||||
oamData, err := r.neConfOAMRead(neType, neId, true)
|
oamData, err := r.neConfOAMRead(neType, neId, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// UPF和SMF 全小写的key
|
// UPF和SMF 全小写的key
|
||||||
if _, ok := oamData["httpmanagecfg"]; ok {
|
// 网元HTTP服务
|
||||||
content := map[string]any{}
|
if v, ok := oamData["httpmanagecfg"]; ok && v != nil {
|
||||||
// 网元HTTP服务
|
item := v.(map[string]any)
|
||||||
// if v, ok := oamData["httpmanagecfg"]; ok {
|
if v, ok := item["iptype"]; ok && v != nil {
|
||||||
// item := v.(map[string]any)
|
item["ipType"] = v
|
||||||
// }
|
delete(item, "iptype")
|
||||||
// 对网管HTTP配置
|
|
||||||
if v, ok := oamData["oamconfig"]; ok {
|
|
||||||
item := v.(map[string]any)
|
|
||||||
if v, ok := item["iptype"]; ok && v != "" && v != nil {
|
|
||||||
ipType := v.(string)
|
|
||||||
if ipType == "ipv6" {
|
|
||||||
content["omcIP"] = item["ipv6"]
|
|
||||||
}
|
|
||||||
if ipType == "ipv4" {
|
|
||||||
content["omcIP"] = item["ipv4"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
content["oamEnable"] = item["enable"]
|
|
||||||
content["oamPort"] = item["port"]
|
|
||||||
}
|
}
|
||||||
// 对网管SNMP配置
|
oamData["httpManageCfg"] = item
|
||||||
if v, ok := oamData["snmpconfig"]; ok {
|
delete(oamData, "httpmanagecfg")
|
||||||
item := v.(map[string]any)
|
r.neConfOAMWirte(neType, neId, oamData, false)
|
||||||
content["snmpEnable"] = item["enable"]
|
}
|
||||||
content["snmpPort"] = item["port"]
|
// 对网管HTTP配置
|
||||||
}
|
if v, ok := oamData["oamconfig"]; ok && v != nil {
|
||||||
// 对网管KPI上报配置
|
item := v.(map[string]any)
|
||||||
if v, ok := oamData["kpiconfig"]; ok {
|
if v, ok := item["iptype"]; ok && v != nil {
|
||||||
item := v.(map[string]any)
|
item["ipType"] = v
|
||||||
content["kpiEnable"] = item["enable"]
|
delete(item, "iptype")
|
||||||
content["kpiTimer"] = item["timer"]
|
}
|
||||||
}
|
if v, ok := item["neconfig"]; ok && v != nil {
|
||||||
|
item["neConfig"] = v
|
||||||
oamData := r.neConfOAMData()
|
delete(item, "neconfig")
|
||||||
|
}
|
||||||
|
oamData["oamConfig"] = item
|
||||||
|
delete(oamData, "oamconfig")
|
||||||
|
r.neConfOAMWirte(neType, neId, oamData, false)
|
||||||
|
}
|
||||||
|
// 对网管SNMP配置
|
||||||
|
if v, ok := oamData["snmpconfig"]; ok && v != nil {
|
||||||
|
item := v.(map[string]any)
|
||||||
|
if v, ok := item["iptype"]; ok && v != nil {
|
||||||
|
item["ipType"] = v
|
||||||
|
delete(item, "iptype")
|
||||||
|
}
|
||||||
|
oamData["snmpConfig"] = item
|
||||||
|
delete(oamData, "snmpconfig")
|
||||||
|
r.neConfOAMWirte(neType, neId, oamData, false)
|
||||||
|
}
|
||||||
|
// 对网管KPI上报配置
|
||||||
|
if v, ok := oamData["kpiconfig"]; ok && v != nil {
|
||||||
|
item := v.(map[string]any)
|
||||||
|
oamData["kpiConfig"] = item
|
||||||
|
delete(oamData, "kpiconfig")
|
||||||
r.neConfOAMWirte(neType, neId, oamData, false)
|
r.neConfOAMWirte(neType, neId, oamData, false)
|
||||||
r.NeConfOAMWirteSync(model.NeInfo{
|
|
||||||
NeType: neType,
|
|
||||||
NeId: neId,
|
|
||||||
}, content, false)
|
|
||||||
return r.neConfOAMRead(neType, neId, false)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// NSSF和MME 配置KPIconfig名不一致时
|
// NSSF和MME 配置KPIconfig名不一致时
|
||||||
@@ -536,7 +538,7 @@ func (r *NeInfo) NeConfOAMReadSync(neType, neId string) (map[string]any, error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// neConfOAMData 网元OAM配置文件默认格式数据
|
// neConfOAMData 网元OAM配置文件默认格式数据
|
||||||
func (r *NeInfo) neConfOAMData() map[string]any {
|
func (r NeInfo) neConfOAMData() map[string]any {
|
||||||
return map[string]any{
|
return map[string]any{
|
||||||
"httpManageCfg": map[string]any{
|
"httpManageCfg": map[string]any{
|
||||||
"ipType": "ipv4",
|
"ipType": "ipv4",
|
||||||
@@ -579,11 +581,11 @@ func (r *NeInfo) neConfOAMData() map[string]any {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// neConfOAMRead 网元OAM配置文件读取 sync从网元端同步到本地
|
// neConfOAMRead 网元OAM配置文件读取 sync从网元端同步到本地
|
||||||
func (r *NeInfo) neConfOAMRead(neType, neId string, sync bool) (map[string]any, error) {
|
func (r NeInfo) neConfOAMRead(neType, neId string, sync bool) (map[string]any, error) {
|
||||||
neTypeLower := strings.ToLower(neType)
|
neTypeLower := strings.ToLower(neType)
|
||||||
fileName := "oam_manager.yaml"
|
fileName := "oam_manager.yaml"
|
||||||
// 网管本地路径
|
// 网管本地路径
|
||||||
localFilePath := fmt.Sprintf("/usr/local/etc/omc/ne_config/%s/%s/%s", neTypeLower, neId, fileName)
|
localFilePath := fmt.Sprintf("/usr/local/omc/backup/ne_config/%s/%s/%s", neTypeLower, neId, fileName)
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
localFilePath = fmt.Sprintf("C:%s", localFilePath)
|
localFilePath = fmt.Sprintf("C:%s", localFilePath)
|
||||||
}
|
}
|
||||||
@@ -614,7 +616,7 @@ func (r *NeInfo) neConfOAMRead(neType, neId string, sync bool) (map[string]any,
|
|||||||
|
|
||||||
// 读取文件内容
|
// 读取文件内容
|
||||||
bytes, err := os.ReadFile(localFilePath)
|
bytes, err := os.ReadFile(localFilePath)
|
||||||
if err != nil {
|
if err != nil || len(bytes) == 0 {
|
||||||
// logger.Warnf("NeConfOAMRead ReadFile => %s", err.Error())
|
// logger.Warnf("NeConfOAMRead ReadFile => %s", err.Error())
|
||||||
// return nil, fmt.Errorf("read file error")
|
// return nil, fmt.Errorf("read file error")
|
||||||
// 无保留文件时返回默认文件数据
|
// 无保留文件时返回默认文件数据
|
||||||
@@ -634,11 +636,11 @@ func (r *NeInfo) neConfOAMRead(neType, neId string, sync bool) (map[string]any,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// neConfOAMWirte 网元OAM配置文件写入 content内容 sync同步到网元端
|
// neConfOAMWirte 网元OAM配置文件写入 content内容 sync同步到网元端
|
||||||
func (r *NeInfo) neConfOAMWirte(neType, neId string, content any, sync bool) error {
|
func (r NeInfo) neConfOAMWirte(neType, neId string, content any, sync bool) error {
|
||||||
neTypeLower := strings.ToLower(neType)
|
neTypeLower := strings.ToLower(neType)
|
||||||
fileName := "oam_manager.yaml"
|
fileName := "oam_manager.yaml"
|
||||||
// 网管本地路径
|
// 网管本地路径
|
||||||
omcPath := "/usr/local/etc/omc/ne_config"
|
omcPath := "/usr/local/omc/backup/ne_config"
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
omcPath = fmt.Sprintf("C:%s", omcPath)
|
omcPath = fmt.Sprintf("C:%s", omcPath)
|
||||||
}
|
}
|
||||||
@@ -679,107 +681,123 @@ func (r *NeInfo) neConfOAMWirte(neType, neId string, content any, sync bool) err
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NeConfOAMWirteSync 网元OAM配置文件生成并同步
|
// NeConfOAMWirteSync 网元OAM配置文件生成并同步
|
||||||
func (r *NeInfo) NeConfOAMWirteSync(neInfo model.NeInfo, content map[string]any, sync bool) error {
|
func (r NeInfo) NeConfOAMWirteSync(neInfo model.NeInfo, content map[string]any, sync bool) error {
|
||||||
oamData, err := r.neConfOAMRead(neInfo.NeType, neInfo.NeId, false)
|
oamData, err := r.neConfOAMRead(neInfo.NeType, neInfo.NeId, false)
|
||||||
if oamData == nil || err != nil {
|
if oamData == nil || err != nil {
|
||||||
return fmt.Errorf("error read OAM file info")
|
return fmt.Errorf("error read OAM file info")
|
||||||
}
|
}
|
||||||
// 网元HTTP服务
|
// 网元HTTP服务
|
||||||
if v, ok := oamData["httpManageCfg"]; ok {
|
httpManageCfg, ok := oamData["httpManageCfg"].(map[string]any)
|
||||||
item := v.(map[string]any)
|
if !ok {
|
||||||
item["port"] = neInfo.Port
|
neConfOAMData := r.neConfOAMData()
|
||||||
if strings.Contains(neInfo.IP, ":") {
|
httpManageCfg = neConfOAMData["httpManageCfg"].(map[string]any)
|
||||||
item["ipType"] = "ipv6"
|
|
||||||
item["ipv6"] = neInfo.IP
|
|
||||||
}
|
|
||||||
if strings.Contains(neInfo.IP, ".") {
|
|
||||||
item["ipType"] = "ipv4"
|
|
||||||
item["ipv4"] = neInfo.IP
|
|
||||||
}
|
|
||||||
|
|
||||||
oamData["httpManageCfg"] = item
|
|
||||||
}
|
}
|
||||||
|
httpManageCfg["port"] = neInfo.Port
|
||||||
|
if strings.Contains(neInfo.IP, ":") {
|
||||||
|
httpManageCfg["ipType"] = "ipv6"
|
||||||
|
httpManageCfg["ipv6"] = neInfo.IP
|
||||||
|
}
|
||||||
|
if strings.Contains(neInfo.IP, ".") {
|
||||||
|
httpManageCfg["ipType"] = "ipv4"
|
||||||
|
httpManageCfg["ipv4"] = neInfo.IP
|
||||||
|
}
|
||||||
|
delete(httpManageCfg, "iptype")
|
||||||
|
delete(oamData, "httpmanagecfg")
|
||||||
|
oamData["httpManageCfg"] = httpManageCfg
|
||||||
|
|
||||||
// 对网管HTTP配置
|
// 对网管HTTP配置
|
||||||
if v, ok := oamData["oamConfig"]; ok {
|
oamConfig, ok := oamData["oamConfig"].(map[string]any)
|
||||||
item := v.(map[string]any)
|
if !ok {
|
||||||
item["neConfig"] = map[string]string{
|
neConfOAMData := r.neConfOAMData()
|
||||||
"neId": neInfo.NeId,
|
oamConfig = neConfOAMData["oamConfig"].(map[string]any)
|
||||||
"rmUid": neInfo.RmUID,
|
|
||||||
"neName": neInfo.NeName,
|
|
||||||
"dn": neInfo.Dn,
|
|
||||||
"vendorName": neInfo.VendorName,
|
|
||||||
"province": neInfo.Province,
|
|
||||||
"pvFlag": neInfo.PvFlag,
|
|
||||||
}
|
|
||||||
|
|
||||||
// 公共参数指定的OMC
|
|
||||||
if omcIP, ok := r.Para5GData["OMC_IP"]; ok && omcIP != "" {
|
|
||||||
if strings.Contains(omcIP, ":") {
|
|
||||||
item["ipType"] = "ipv6"
|
|
||||||
item["ipv6"] = omcIP
|
|
||||||
}
|
|
||||||
if strings.Contains(omcIP, ".") {
|
|
||||||
item["ipType"] = "ipv4"
|
|
||||||
item["ipv4"] = omcIP
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if v, ok := content["omcIP"]; ok && v != "" && v != nil {
|
|
||||||
omcIP := v.(string)
|
|
||||||
if strings.Contains(omcIP, ":") {
|
|
||||||
item["ipType"] = "ipv6"
|
|
||||||
item["ipv6"] = omcIP
|
|
||||||
}
|
|
||||||
if strings.Contains(omcIP, ".") {
|
|
||||||
item["ipType"] = "ipv4"
|
|
||||||
item["ipv4"] = omcIP
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if oamEnable, ok := content["oamEnable"]; ok && oamEnable != nil {
|
|
||||||
item["enable"] = parse.Boolean(oamEnable)
|
|
||||||
}
|
|
||||||
if oamPort, ok := content["oamPort"]; ok && oamPort != nil {
|
|
||||||
item["port"] = parse.Number(oamPort)
|
|
||||||
}
|
|
||||||
oamData["oamConfig"] = item
|
|
||||||
}
|
}
|
||||||
|
delete(oamConfig, "neconfig")
|
||||||
|
oamConfig["neConfig"] = map[string]string{
|
||||||
|
"neId": neInfo.NeId,
|
||||||
|
"rmUid": neInfo.RmUID,
|
||||||
|
"neName": neInfo.NeName,
|
||||||
|
"dn": neInfo.Dn,
|
||||||
|
"vendorName": neInfo.VendorName,
|
||||||
|
"province": neInfo.Province,
|
||||||
|
"pvFlag": neInfo.PvFlag,
|
||||||
|
}
|
||||||
|
// 公共参数指定的OMC
|
||||||
|
if omcIP, ok := r.Para5GData["OMC_IP"]; ok && omcIP != "" {
|
||||||
|
if strings.Contains(omcIP, ":") {
|
||||||
|
oamConfig["ipType"] = "ipv6"
|
||||||
|
oamConfig["ipv6"] = omcIP
|
||||||
|
}
|
||||||
|
if strings.Contains(omcIP, ".") {
|
||||||
|
oamConfig["ipType"] = "ipv4"
|
||||||
|
oamConfig["ipv4"] = omcIP
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 传入的变更
|
||||||
|
if v, ok := content["omcIP"]; ok && v != "" && v != nil {
|
||||||
|
omcIP := v.(string)
|
||||||
|
if strings.Contains(omcIP, ":") {
|
||||||
|
oamConfig["ipType"] = "ipv6"
|
||||||
|
oamConfig["ipv6"] = omcIP
|
||||||
|
}
|
||||||
|
if strings.Contains(omcIP, ".") {
|
||||||
|
oamConfig["ipType"] = "ipv4"
|
||||||
|
oamConfig["ipv4"] = omcIP
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete(oamConfig, "iptype")
|
||||||
|
if oamEnable, ok := content["oamEnable"]; ok && oamEnable != nil {
|
||||||
|
oamConfig["enable"] = parse.Boolean(oamEnable)
|
||||||
|
}
|
||||||
|
if oamPort, ok := content["oamPort"]; ok && oamPort != nil {
|
||||||
|
oamConfig["port"] = parse.Number(oamPort)
|
||||||
|
}
|
||||||
|
delete(oamData, "oamconfig")
|
||||||
|
oamData["oamConfig"] = oamConfig
|
||||||
|
|
||||||
// 对网管SNMP配置
|
// 对网管SNMP配置
|
||||||
if v, ok := oamData["snmpConfig"]; ok {
|
snmpConfig, ok := oamData["snmpConfig"].(map[string]any)
|
||||||
item := v.(map[string]any)
|
if !ok {
|
||||||
if strings.Contains(neInfo.IP, ":") {
|
neConfOAMData := r.neConfOAMData()
|
||||||
item["ipType"] = "ipv6"
|
snmpConfig = neConfOAMData["snmpConfig"].(map[string]any)
|
||||||
item["ipv6"] = neInfo.IP
|
|
||||||
}
|
|
||||||
if strings.Contains(neInfo.IP, ".") {
|
|
||||||
item["ipType"] = "ipv4"
|
|
||||||
item["ipv4"] = neInfo.IP
|
|
||||||
}
|
|
||||||
|
|
||||||
if snmpEnable, ok := content["snmpEnable"]; ok && snmpEnable != nil {
|
|
||||||
item["enable"] = parse.Boolean(snmpEnable)
|
|
||||||
}
|
|
||||||
if snmpPort, ok := content["snmpPort"]; ok && snmpPort != nil {
|
|
||||||
item["port"] = parse.Number(snmpPort)
|
|
||||||
}
|
|
||||||
oamData["snmpConfig"] = item
|
|
||||||
}
|
}
|
||||||
|
if strings.Contains(neInfo.IP, ":") {
|
||||||
|
snmpConfig["ipType"] = "ipv6"
|
||||||
|
snmpConfig["ipv6"] = neInfo.IP
|
||||||
|
}
|
||||||
|
if strings.Contains(neInfo.IP, ".") {
|
||||||
|
snmpConfig["ipType"] = "ipv4"
|
||||||
|
snmpConfig["ipv4"] = neInfo.IP
|
||||||
|
}
|
||||||
|
delete(snmpConfig, "iptype")
|
||||||
|
if snmpEnable, ok := content["snmpEnable"]; ok && snmpEnable != nil {
|
||||||
|
snmpConfig["enable"] = parse.Boolean(snmpEnable)
|
||||||
|
}
|
||||||
|
if snmpPort, ok := content["snmpPort"]; ok && snmpPort != nil {
|
||||||
|
snmpConfig["port"] = parse.Number(snmpPort)
|
||||||
|
}
|
||||||
|
delete(oamData, "snmpconfig")
|
||||||
|
oamData["snmpConfig"] = snmpConfig
|
||||||
|
|
||||||
// 对网管KPI上报配置
|
// 对网管KPI上报配置
|
||||||
if v, ok := oamData["kpiConfig"]; ok {
|
kpiConfig, ok := oamData["kpiConfig"].(map[string]any)
|
||||||
item := v.(map[string]any)
|
if !ok {
|
||||||
if neInfo.NeType == "UPF" {
|
neConfOAMData := r.neConfOAMData()
|
||||||
item["timer"] = 5
|
kpiConfig = neConfOAMData["kpiConfig"].(map[string]any)
|
||||||
} else {
|
|
||||||
item["timer"] = 60
|
|
||||||
}
|
|
||||||
|
|
||||||
if kpiEnable, ok := content["kpiEnable"]; ok && kpiEnable != nil {
|
|
||||||
item["enable"] = parse.Boolean(kpiEnable)
|
|
||||||
}
|
|
||||||
if kpiTimer, ok := content["kpiTimer"]; ok && kpiTimer != nil {
|
|
||||||
item["timer"] = parse.Number(kpiTimer)
|
|
||||||
}
|
|
||||||
oamData["kpiConfig"] = item
|
|
||||||
}
|
}
|
||||||
|
if neInfo.NeType == "UPF" {
|
||||||
|
kpiConfig["timer"] = 5
|
||||||
|
} else {
|
||||||
|
kpiConfig["timer"] = 60
|
||||||
|
}
|
||||||
|
if kpiEnable, ok := content["kpiEnable"]; ok && kpiEnable != nil {
|
||||||
|
kpiConfig["enable"] = parse.Boolean(kpiEnable)
|
||||||
|
}
|
||||||
|
if kpiTimer, ok := content["kpiTimer"]; ok && kpiTimer != nil {
|
||||||
|
kpiConfig["timer"] = parse.Number(kpiTimer)
|
||||||
|
}
|
||||||
|
delete(oamData, "kpiconfig")
|
||||||
|
oamData["kpiConfig"] = kpiConfig
|
||||||
|
|
||||||
if err := r.neConfOAMWirte(neInfo.NeType, neInfo.NeId, oamData, sync); err != nil {
|
if err := r.neConfOAMWirte(neInfo.NeType, neInfo.NeId, oamData, sync); err != nil {
|
||||||
return fmt.Errorf("error wirte OAM file info")
|
return fmt.Errorf("error wirte OAM file info")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user