fix: 网元版本列表主动检查服务状态的版本
This commit is contained in:
@@ -20,7 +20,7 @@ import (
|
|||||||
var NewNeInfo = &NeInfoController{
|
var NewNeInfo = &NeInfoController{
|
||||||
neInfoService: neService.NewNeInfoImpl,
|
neInfoService: neService.NewNeInfoImpl,
|
||||||
neLicenseService: neService.NewNeLicenseImpl,
|
neLicenseService: neService.NewNeLicenseImpl,
|
||||||
neVersionService: neService.NewNeVersionImpl,
|
neVersionService: neService.NewNeVersion,
|
||||||
}
|
}
|
||||||
|
|
||||||
// 网元信息请求
|
// 网元信息请求
|
||||||
@@ -32,7 +32,7 @@ type NeInfoController struct {
|
|||||||
// 网元授权激活信息服务
|
// 网元授权激活信息服务
|
||||||
neLicenseService neService.INeLicense
|
neLicenseService neService.INeLicense
|
||||||
// 网元版本信息服务
|
// 网元版本信息服务
|
||||||
neVersionService neService.INeVersion
|
neVersionService *neService.NeVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
// neStateCacheMap 网元状态缓存最后一次成功的信息
|
// neStateCacheMap 网元状态缓存最后一次成功的信息
|
||||||
@@ -318,6 +318,8 @@ func (s *NeInfoController) Add(c *gin.Context) {
|
|||||||
// 已有网元可获取的信息
|
// 已有网元可获取的信息
|
||||||
if body.ServerState != nil {
|
if body.ServerState != nil {
|
||||||
if v, ok := body.ServerState["version"]; ok && v != nil {
|
if v, ok := body.ServerState["version"]; ok && v != nil {
|
||||||
|
neVersion.Name = "-"
|
||||||
|
neVersion.Path = "-"
|
||||||
neVersion.Version = v.(string)
|
neVersion.Version = v.(string)
|
||||||
}
|
}
|
||||||
if v, ok := body.ServerState["sn"]; ok && v != nil {
|
if v, ok := body.ServerState["sn"]; ok && v != nil {
|
||||||
@@ -397,6 +399,8 @@ func (s *NeInfoController) Edit(c *gin.Context) {
|
|||||||
// 已有网元可获取的信息
|
// 已有网元可获取的信息
|
||||||
if body.ServerState != nil {
|
if body.ServerState != nil {
|
||||||
if v, ok := body.ServerState["version"]; ok && v != nil {
|
if v, ok := body.ServerState["version"]; ok && v != nil {
|
||||||
|
neVersion.Name = "-"
|
||||||
|
neVersion.Path = "-"
|
||||||
neVersion.Version = v.(string)
|
neVersion.Version = v.(string)
|
||||||
neVersion.UpdateBy = loginUserName
|
neVersion.UpdateBy = loginUserName
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import (
|
|||||||
|
|
||||||
// 实例化控制层 NeVersionController 结构体
|
// 实例化控制层 NeVersionController 结构体
|
||||||
var NewNeVersion = &NeVersionController{
|
var NewNeVersion = &NeVersionController{
|
||||||
neVersionService: neService.NewNeVersionImpl,
|
neVersionService: neService.NewNeVersion,
|
||||||
}
|
}
|
||||||
|
|
||||||
// 网元版本请求
|
// 网元版本请求
|
||||||
@@ -19,7 +19,7 @@ var NewNeVersion = &NeVersionController{
|
|||||||
// PATH /version
|
// PATH /version
|
||||||
type NeVersionController struct {
|
type NeVersionController struct {
|
||||||
// 网元版本服务
|
// 网元版本服务
|
||||||
neVersionService neService.INeVersion
|
neVersionService *neService.NeVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
// 网元版本列表
|
// 网元版本列表
|
||||||
@@ -27,7 +27,7 @@ type NeVersionController struct {
|
|||||||
// GET /list
|
// GET /list
|
||||||
func (s *NeVersionController) List(c *gin.Context) {
|
func (s *NeVersionController) List(c *gin.Context) {
|
||||||
querys := ctx.QueryMap(c)
|
querys := ctx.QueryMap(c)
|
||||||
data := s.neVersionService.SelectPage(querys)
|
data := s.neVersionService.SelectPage(querys, true)
|
||||||
|
|
||||||
c.JSON(200, result.Ok(data))
|
c.JSON(200, result.Ok(data))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,24 +1,329 @@
|
|||||||
package repository
|
package repository
|
||||||
|
|
||||||
import "be.ems/src/modules/network_element/model"
|
import (
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
// INeVersion 网元版本信息 数据层接口
|
"be.ems/src/framework/datasource"
|
||||||
type INeVersion interface {
|
"be.ems/src/framework/logger"
|
||||||
// SelectPage 根据条件分页查询字典类型
|
"be.ems/src/framework/utils/parse"
|
||||||
SelectPage(query map[string]any) map[string]any
|
"be.ems/src/framework/utils/repo"
|
||||||
|
"be.ems/src/modules/network_element/model"
|
||||||
|
)
|
||||||
|
|
||||||
// SelectList 根据实体查询
|
// 实例化数据层 NeVersion 结构体
|
||||||
SelectList(neVersion model.NeVersion) []model.NeVersion
|
var NewNeVersion = &NeVersion{
|
||||||
|
selectSql: `select
|
||||||
|
id, ne_type, ne_id, name, version, path, pre_name, pre_version, pre_path, new_name, new_version, new_path, status, create_by, create_time, update_by, update_time
|
||||||
|
from ne_version`,
|
||||||
|
|
||||||
// SelectByIds 通过ID查询
|
resultMap: map[string]string{
|
||||||
SelectByIds(ids []string) []model.NeVersion
|
"id": "ID",
|
||||||
|
"ne_type": "NeType",
|
||||||
// Insert 新增信息
|
"ne_id": "NeId",
|
||||||
Insert(neVersion model.NeVersion) string
|
"name": "name",
|
||||||
|
"version": "Version",
|
||||||
// Update 修改信息
|
"path": "Path",
|
||||||
Update(neVersion model.NeVersion) int64
|
"pre_name": "preName",
|
||||||
|
"pre_version": "PreVersion",
|
||||||
// DeleteByIds 批量删除信息
|
"pre_path": "PrePath",
|
||||||
DeleteByIds(ids []string) int64
|
"new_name": "NewName",
|
||||||
|
"new_version": "NewVersion",
|
||||||
|
"new_path": "NewPath",
|
||||||
|
"status": "Status",
|
||||||
|
"create_by": "CreateBy",
|
||||||
|
"create_time": "CreateTime",
|
||||||
|
"update_by": "UpdateBy",
|
||||||
|
"update_time": "UpdateTime",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// NeVersion 网元版本信息 数据层处理
|
||||||
|
type NeVersion struct {
|
||||||
|
// 查询视图对象SQL
|
||||||
|
selectSql string
|
||||||
|
// 结果字段与实体映射
|
||||||
|
resultMap map[string]string
|
||||||
|
}
|
||||||
|
|
||||||
|
// convertResultRows 将结果记录转实体结果组
|
||||||
|
func (r *NeVersion) convertResultRows(rows []map[string]any) []model.NeVersion {
|
||||||
|
arr := make([]model.NeVersion, 0)
|
||||||
|
for _, row := range rows {
|
||||||
|
item := model.NeVersion{}
|
||||||
|
for key, value := range row {
|
||||||
|
if keyMapper, ok := r.resultMap[key]; ok {
|
||||||
|
repo.SetFieldValue(&item, keyMapper, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
arr = append(arr, item)
|
||||||
|
}
|
||||||
|
return arr
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectPage 根据条件分页查询字典类型
|
||||||
|
func (r *NeVersion) SelectPage(query map[string]any) map[string]any {
|
||||||
|
// 查询条件拼接
|
||||||
|
var conditions []string
|
||||||
|
var params []any
|
||||||
|
if v, ok := query["neType"]; ok && v != "" {
|
||||||
|
conditions = append(conditions, "ne_type = ?")
|
||||||
|
params = append(params, strings.Trim(v.(string), " "))
|
||||||
|
}
|
||||||
|
if v, ok := query["neId"]; ok && v != "" {
|
||||||
|
conditions = append(conditions, "ne_id = ?")
|
||||||
|
params = append(params, strings.Trim(v.(string), " "))
|
||||||
|
}
|
||||||
|
if v, ok := query["version"]; ok && v != "" {
|
||||||
|
conditions = append(conditions, "version like concat(?, '%')")
|
||||||
|
params = append(params, strings.Trim(v.(string), " "))
|
||||||
|
}
|
||||||
|
if v, ok := query["path"]; ok && v != "" {
|
||||||
|
conditions = append(conditions, "path like concat(?, '%')")
|
||||||
|
params = append(params, strings.Trim(v.(string), " "))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构建查询条件语句
|
||||||
|
whereSql := ""
|
||||||
|
if len(conditions) > 0 {
|
||||||
|
whereSql += " where " + strings.Join(conditions, " and ")
|
||||||
|
}
|
||||||
|
|
||||||
|
result := map[string]any{
|
||||||
|
"total": 0,
|
||||||
|
"rows": []model.NeHost{},
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询数量 长度为0直接返回
|
||||||
|
totalSql := "select count(1) as 'total' from ne_version"
|
||||||
|
totalRows, err := datasource.RawDB("", totalSql+whereSql, params)
|
||||||
|
if err != nil {
|
||||||
|
logger.Errorf("total err => %v", err)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
total := parse.Number(totalRows[0]["total"])
|
||||||
|
if total == 0 {
|
||||||
|
return result
|
||||||
|
} else {
|
||||||
|
result["total"] = total
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分页
|
||||||
|
pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"])
|
||||||
|
pageSql := " order by update_time desc limit ?,? "
|
||||||
|
params = append(params, pageNum*pageSize)
|
||||||
|
params = append(params, pageSize)
|
||||||
|
|
||||||
|
// 查询数据
|
||||||
|
querySql := r.selectSql + whereSql + pageSql
|
||||||
|
results, err := datasource.RawDB("", querySql, params)
|
||||||
|
if err != nil {
|
||||||
|
logger.Errorf("query err => %v", err)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// 转换实体
|
||||||
|
result["rows"] = r.convertResultRows(results)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectList 根据实体查询
|
||||||
|
func (r *NeVersion) SelectList(neVersion model.NeVersion) []model.NeVersion {
|
||||||
|
// 查询条件拼接
|
||||||
|
var conditions []string
|
||||||
|
var params []any
|
||||||
|
if neVersion.NeType != "" {
|
||||||
|
conditions = append(conditions, "ne_type = ?")
|
||||||
|
params = append(params, neVersion.NeType)
|
||||||
|
}
|
||||||
|
if neVersion.NeId != "" {
|
||||||
|
conditions = append(conditions, "ne_id = ?")
|
||||||
|
params = append(params, neVersion.NeId)
|
||||||
|
}
|
||||||
|
if neVersion.Version != "" {
|
||||||
|
conditions = append(conditions, "version like concat(?, '%')")
|
||||||
|
params = append(params, neVersion.Version)
|
||||||
|
}
|
||||||
|
if neVersion.Path != "" {
|
||||||
|
conditions = append(conditions, "path like concat(?, '%')")
|
||||||
|
params = append(params, neVersion.Path)
|
||||||
|
}
|
||||||
|
if neVersion.Status != "" {
|
||||||
|
conditions = append(conditions, "status = ?")
|
||||||
|
params = append(params, neVersion.Status)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构建查询条件语句
|
||||||
|
whereSql := ""
|
||||||
|
if len(conditions) > 0 {
|
||||||
|
whereSql += " where " + strings.Join(conditions, " and ")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询数据
|
||||||
|
querySql := r.selectSql + whereSql + " order by id asc "
|
||||||
|
results, err := datasource.RawDB("", querySql, params)
|
||||||
|
if err != nil {
|
||||||
|
logger.Errorf("query err => %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 转换实体
|
||||||
|
return r.convertResultRows(results)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectByIds 通过ID查询
|
||||||
|
func (r *NeVersion) SelectByIds(cmdIds []string) []model.NeVersion {
|
||||||
|
placeholder := repo.KeyPlaceholderByQuery(len(cmdIds))
|
||||||
|
querySql := r.selectSql + " where id in (" + placeholder + ")"
|
||||||
|
parameters := repo.ConvertIdsSlice(cmdIds)
|
||||||
|
results, err := datasource.RawDB("", querySql, parameters)
|
||||||
|
if err != nil {
|
||||||
|
logger.Errorf("query err => %v", err)
|
||||||
|
return []model.NeVersion{}
|
||||||
|
}
|
||||||
|
// 转换实体
|
||||||
|
return r.convertResultRows(results)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 新增信息
|
||||||
|
func (r *NeVersion) Insert(neVersion model.NeVersion) string {
|
||||||
|
// 参数拼接
|
||||||
|
params := make(map[string]any)
|
||||||
|
if neVersion.NeType != "" {
|
||||||
|
params["ne_type"] = neVersion.NeType
|
||||||
|
}
|
||||||
|
if neVersion.NeId != "" {
|
||||||
|
params["ne_id"] = neVersion.NeId
|
||||||
|
}
|
||||||
|
if neVersion.Name != "" {
|
||||||
|
params["name"] = neVersion.Name
|
||||||
|
}
|
||||||
|
if neVersion.Version != "" {
|
||||||
|
params["version"] = neVersion.Version
|
||||||
|
}
|
||||||
|
if neVersion.Path != "" {
|
||||||
|
params["path"] = neVersion.Path
|
||||||
|
}
|
||||||
|
if neVersion.PreName != "" {
|
||||||
|
params["pre_name"] = neVersion.PreName
|
||||||
|
}
|
||||||
|
if neVersion.PreVersion != "" {
|
||||||
|
params["pre_version"] = neVersion.PreVersion
|
||||||
|
}
|
||||||
|
if neVersion.PrePath != "" {
|
||||||
|
params["pre_path"] = neVersion.PrePath
|
||||||
|
}
|
||||||
|
if neVersion.NewName != "" {
|
||||||
|
params["new_name"] = neVersion.NewName
|
||||||
|
}
|
||||||
|
if neVersion.NewVersion != "" {
|
||||||
|
params["new_version"] = neVersion.NewVersion
|
||||||
|
}
|
||||||
|
if neVersion.NewPath != "" {
|
||||||
|
params["new_path"] = neVersion.NewPath
|
||||||
|
}
|
||||||
|
if neVersion.Status != "" {
|
||||||
|
params["status"] = neVersion.Status
|
||||||
|
}
|
||||||
|
if neVersion.CreateBy != "" {
|
||||||
|
params["create_by"] = neVersion.CreateBy
|
||||||
|
params["create_time"] = time.Now().UnixMilli()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构建执行语句
|
||||||
|
keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params)
|
||||||
|
sql := "insert into ne_version (" + strings.Join(keys, ",") + ")values(" + placeholder + ")"
|
||||||
|
|
||||||
|
db := datasource.DefaultDB()
|
||||||
|
// 开启事务
|
||||||
|
tx := db.Begin()
|
||||||
|
// 执行插入
|
||||||
|
err := tx.Exec(sql, values...).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Errorf("insert row : %v", err.Error())
|
||||||
|
tx.Rollback()
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
// 获取生成的自增 ID
|
||||||
|
var insertedID string
|
||||||
|
err = tx.Raw("select last_insert_id()").Row().Scan(&insertedID)
|
||||||
|
if err != nil {
|
||||||
|
logger.Errorf("insert last id : %v", err.Error())
|
||||||
|
tx.Rollback()
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
// 提交事务
|
||||||
|
tx.Commit()
|
||||||
|
return insertedID
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 修改信息
|
||||||
|
func (r *NeVersion) Update(neVersion model.NeVersion) int64 {
|
||||||
|
// 参数拼接
|
||||||
|
params := make(map[string]any)
|
||||||
|
if neVersion.NeType != "" {
|
||||||
|
params["ne_type"] = neVersion.NeType
|
||||||
|
}
|
||||||
|
if neVersion.NeId != "" {
|
||||||
|
params["ne_id"] = neVersion.NeId
|
||||||
|
}
|
||||||
|
if neVersion.Name != "" {
|
||||||
|
params["name"] = neVersion.Name
|
||||||
|
}
|
||||||
|
if neVersion.Version != "" {
|
||||||
|
params["version"] = neVersion.Version
|
||||||
|
}
|
||||||
|
if neVersion.Path != "" {
|
||||||
|
params["path"] = neVersion.Path
|
||||||
|
}
|
||||||
|
if neVersion.PreName != "" {
|
||||||
|
params["pre_name"] = neVersion.PreName
|
||||||
|
}
|
||||||
|
if neVersion.PreVersion != "" {
|
||||||
|
params["pre_version"] = neVersion.PreVersion
|
||||||
|
}
|
||||||
|
if neVersion.PrePath != "" {
|
||||||
|
params["pre_path"] = neVersion.PrePath
|
||||||
|
}
|
||||||
|
if neVersion.NewName != "" {
|
||||||
|
params["new_name"] = neVersion.NewName
|
||||||
|
}
|
||||||
|
if neVersion.NewVersion != "" {
|
||||||
|
params["new_version"] = neVersion.NewVersion
|
||||||
|
}
|
||||||
|
if neVersion.NewPath != "" {
|
||||||
|
params["new_path"] = neVersion.NewPath
|
||||||
|
}
|
||||||
|
if neVersion.Status != "" {
|
||||||
|
params["status"] = neVersion.Status
|
||||||
|
}
|
||||||
|
if neVersion.UpdateBy != "" {
|
||||||
|
params["update_by"] = neVersion.UpdateBy
|
||||||
|
params["update_time"] = time.Now().UnixMilli()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构建执行语句
|
||||||
|
keys, values := repo.KeyValueByUpdate(params)
|
||||||
|
sql := "update ne_version set " + strings.Join(keys, ",") + " where id = ?"
|
||||||
|
|
||||||
|
// 执行更新
|
||||||
|
values = append(values, neVersion.ID)
|
||||||
|
rows, err := datasource.ExecDB("", sql, values)
|
||||||
|
if err != nil {
|
||||||
|
logger.Errorf("update row : %v", err.Error())
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return rows
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteByIds 批量删除信息
|
||||||
|
func (r *NeVersion) DeleteByIds(cmdIds []string) int64 {
|
||||||
|
placeholder := repo.KeyPlaceholderByQuery(len(cmdIds))
|
||||||
|
sql := "delete from ne_version where id in (" + placeholder + ")"
|
||||||
|
parameters := repo.ConvertIdsSlice(cmdIds)
|
||||||
|
results, err := datasource.ExecDB("", sql, parameters)
|
||||||
|
if err != nil {
|
||||||
|
logger.Errorf("delete err => %v", err)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return results
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,329 +0,0 @@
|
|||||||
package repository
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"be.ems/src/framework/datasource"
|
|
||||||
"be.ems/src/framework/logger"
|
|
||||||
"be.ems/src/framework/utils/parse"
|
|
||||||
"be.ems/src/framework/utils/repo"
|
|
||||||
"be.ems/src/modules/network_element/model"
|
|
||||||
)
|
|
||||||
|
|
||||||
// 实例化数据层 NewNeVersion 结构体
|
|
||||||
var NewNeVersionImpl = &NeVersionImpl{
|
|
||||||
selectSql: `select
|
|
||||||
id, ne_type, ne_id, name, version, path, pre_name, pre_version, pre_path, new_name, new_version, new_path, status, create_by, create_time, update_by, update_time
|
|
||||||
from ne_version`,
|
|
||||||
|
|
||||||
resultMap: map[string]string{
|
|
||||||
"id": "ID",
|
|
||||||
"ne_type": "NeType",
|
|
||||||
"ne_id": "NeId",
|
|
||||||
"name": "name",
|
|
||||||
"version": "Version",
|
|
||||||
"path": "Path",
|
|
||||||
"pre_name": "preName",
|
|
||||||
"pre_version": "PreVersion",
|
|
||||||
"pre_path": "PrePath",
|
|
||||||
"new_name": "NewName",
|
|
||||||
"new_version": "NewVersion",
|
|
||||||
"new_path": "NewPath",
|
|
||||||
"status": "Status",
|
|
||||||
"create_by": "CreateBy",
|
|
||||||
"create_time": "CreateTime",
|
|
||||||
"update_by": "UpdateBy",
|
|
||||||
"update_time": "UpdateTime",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeVersionImpl 网元版本信息 数据层处理
|
|
||||||
type NeVersionImpl struct {
|
|
||||||
// 查询视图对象SQL
|
|
||||||
selectSql string
|
|
||||||
// 结果字段与实体映射
|
|
||||||
resultMap map[string]string
|
|
||||||
}
|
|
||||||
|
|
||||||
// convertResultRows 将结果记录转实体结果组
|
|
||||||
func (r *NeVersionImpl) convertResultRows(rows []map[string]any) []model.NeVersion {
|
|
||||||
arr := make([]model.NeVersion, 0)
|
|
||||||
for _, row := range rows {
|
|
||||||
item := model.NeVersion{}
|
|
||||||
for key, value := range row {
|
|
||||||
if keyMapper, ok := r.resultMap[key]; ok {
|
|
||||||
repo.SetFieldValue(&item, keyMapper, value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
arr = append(arr, item)
|
|
||||||
}
|
|
||||||
return arr
|
|
||||||
}
|
|
||||||
|
|
||||||
// SelectPage 根据条件分页查询字典类型
|
|
||||||
func (r *NeVersionImpl) SelectPage(query map[string]any) map[string]any {
|
|
||||||
// 查询条件拼接
|
|
||||||
var conditions []string
|
|
||||||
var params []any
|
|
||||||
if v, ok := query["neType"]; ok && v != "" {
|
|
||||||
conditions = append(conditions, "ne_type = ?")
|
|
||||||
params = append(params, strings.Trim(v.(string), " "))
|
|
||||||
}
|
|
||||||
if v, ok := query["neId"]; ok && v != "" {
|
|
||||||
conditions = append(conditions, "ne_id = ?")
|
|
||||||
params = append(params, strings.Trim(v.(string), " "))
|
|
||||||
}
|
|
||||||
if v, ok := query["version"]; ok && v != "" {
|
|
||||||
conditions = append(conditions, "version like concat(?, '%')")
|
|
||||||
params = append(params, strings.Trim(v.(string), " "))
|
|
||||||
}
|
|
||||||
if v, ok := query["path"]; ok && v != "" {
|
|
||||||
conditions = append(conditions, "path like concat(?, '%')")
|
|
||||||
params = append(params, strings.Trim(v.(string), " "))
|
|
||||||
}
|
|
||||||
|
|
||||||
// 构建查询条件语句
|
|
||||||
whereSql := ""
|
|
||||||
if len(conditions) > 0 {
|
|
||||||
whereSql += " where " + strings.Join(conditions, " and ")
|
|
||||||
}
|
|
||||||
|
|
||||||
result := map[string]any{
|
|
||||||
"total": 0,
|
|
||||||
"rows": []model.NeHost{},
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询数量 长度为0直接返回
|
|
||||||
totalSql := "select count(1) as 'total' from ne_version"
|
|
||||||
totalRows, err := datasource.RawDB("", totalSql+whereSql, params)
|
|
||||||
if err != nil {
|
|
||||||
logger.Errorf("total err => %v", err)
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
total := parse.Number(totalRows[0]["total"])
|
|
||||||
if total == 0 {
|
|
||||||
return result
|
|
||||||
} else {
|
|
||||||
result["total"] = total
|
|
||||||
}
|
|
||||||
|
|
||||||
// 分页
|
|
||||||
pageNum, pageSize := repo.PageNumSize(query["pageNum"], query["pageSize"])
|
|
||||||
pageSql := " order by update_time desc limit ?,? "
|
|
||||||
params = append(params, pageNum*pageSize)
|
|
||||||
params = append(params, pageSize)
|
|
||||||
|
|
||||||
// 查询数据
|
|
||||||
querySql := r.selectSql + whereSql + pageSql
|
|
||||||
results, err := datasource.RawDB("", querySql, params)
|
|
||||||
if err != nil {
|
|
||||||
logger.Errorf("query err => %v", err)
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// 转换实体
|
|
||||||
result["rows"] = r.convertResultRows(results)
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// SelectList 根据实体查询
|
|
||||||
func (r *NeVersionImpl) SelectList(neVersion model.NeVersion) []model.NeVersion {
|
|
||||||
// 查询条件拼接
|
|
||||||
var conditions []string
|
|
||||||
var params []any
|
|
||||||
if neVersion.NeType != "" {
|
|
||||||
conditions = append(conditions, "ne_type = ?")
|
|
||||||
params = append(params, neVersion.NeType)
|
|
||||||
}
|
|
||||||
if neVersion.NeId != "" {
|
|
||||||
conditions = append(conditions, "ne_id = ?")
|
|
||||||
params = append(params, neVersion.NeId)
|
|
||||||
}
|
|
||||||
if neVersion.Version != "" {
|
|
||||||
conditions = append(conditions, "version like concat(?, '%')")
|
|
||||||
params = append(params, neVersion.Version)
|
|
||||||
}
|
|
||||||
if neVersion.Path != "" {
|
|
||||||
conditions = append(conditions, "path like concat(?, '%')")
|
|
||||||
params = append(params, neVersion.Path)
|
|
||||||
}
|
|
||||||
if neVersion.Status != "" {
|
|
||||||
conditions = append(conditions, "status = ?")
|
|
||||||
params = append(params, neVersion.Status)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 构建查询条件语句
|
|
||||||
whereSql := ""
|
|
||||||
if len(conditions) > 0 {
|
|
||||||
whereSql += " where " + strings.Join(conditions, " and ")
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询数据
|
|
||||||
querySql := r.selectSql + whereSql + " order by id asc "
|
|
||||||
results, err := datasource.RawDB("", querySql, params)
|
|
||||||
if err != nil {
|
|
||||||
logger.Errorf("query err => %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 转换实体
|
|
||||||
return r.convertResultRows(results)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SelectByIds 通过ID查询
|
|
||||||
func (r *NeVersionImpl) SelectByIds(cmdIds []string) []model.NeVersion {
|
|
||||||
placeholder := repo.KeyPlaceholderByQuery(len(cmdIds))
|
|
||||||
querySql := r.selectSql + " where id in (" + placeholder + ")"
|
|
||||||
parameters := repo.ConvertIdsSlice(cmdIds)
|
|
||||||
results, err := datasource.RawDB("", querySql, parameters)
|
|
||||||
if err != nil {
|
|
||||||
logger.Errorf("query err => %v", err)
|
|
||||||
return []model.NeVersion{}
|
|
||||||
}
|
|
||||||
// 转换实体
|
|
||||||
return r.convertResultRows(results)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Insert 新增信息
|
|
||||||
func (r *NeVersionImpl) Insert(neVersion model.NeVersion) string {
|
|
||||||
// 参数拼接
|
|
||||||
params := make(map[string]any)
|
|
||||||
if neVersion.NeType != "" {
|
|
||||||
params["ne_type"] = neVersion.NeType
|
|
||||||
}
|
|
||||||
if neVersion.NeId != "" {
|
|
||||||
params["ne_id"] = neVersion.NeId
|
|
||||||
}
|
|
||||||
if neVersion.Name != "" {
|
|
||||||
params["name"] = neVersion.Name
|
|
||||||
}
|
|
||||||
if neVersion.Version != "" {
|
|
||||||
params["version"] = neVersion.Version
|
|
||||||
}
|
|
||||||
if neVersion.Path != "" {
|
|
||||||
params["path"] = neVersion.Path
|
|
||||||
}
|
|
||||||
if neVersion.PreName != "" {
|
|
||||||
params["pre_name"] = neVersion.PreName
|
|
||||||
}
|
|
||||||
if neVersion.PreVersion != "" {
|
|
||||||
params["pre_version"] = neVersion.PreVersion
|
|
||||||
}
|
|
||||||
if neVersion.PrePath != "" {
|
|
||||||
params["pre_path"] = neVersion.PrePath
|
|
||||||
}
|
|
||||||
if neVersion.NewName != "" {
|
|
||||||
params["new_name"] = neVersion.NewName
|
|
||||||
}
|
|
||||||
if neVersion.NewVersion != "" {
|
|
||||||
params["new_version"] = neVersion.NewVersion
|
|
||||||
}
|
|
||||||
if neVersion.NewPath != "" {
|
|
||||||
params["new_path"] = neVersion.NewPath
|
|
||||||
}
|
|
||||||
if neVersion.Status != "" {
|
|
||||||
params["status"] = neVersion.Status
|
|
||||||
}
|
|
||||||
if neVersion.CreateBy != "" {
|
|
||||||
params["create_by"] = neVersion.CreateBy
|
|
||||||
params["create_time"] = time.Now().UnixMilli()
|
|
||||||
}
|
|
||||||
|
|
||||||
// 构建执行语句
|
|
||||||
keys, placeholder, values := repo.KeyPlaceholderValueByInsert(params)
|
|
||||||
sql := "insert into ne_version (" + strings.Join(keys, ",") + ")values(" + placeholder + ")"
|
|
||||||
|
|
||||||
db := datasource.DefaultDB()
|
|
||||||
// 开启事务
|
|
||||||
tx := db.Begin()
|
|
||||||
// 执行插入
|
|
||||||
err := tx.Exec(sql, values...).Error
|
|
||||||
if err != nil {
|
|
||||||
logger.Errorf("insert row : %v", err.Error())
|
|
||||||
tx.Rollback()
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
// 获取生成的自增 ID
|
|
||||||
var insertedID string
|
|
||||||
err = tx.Raw("select last_insert_id()").Row().Scan(&insertedID)
|
|
||||||
if err != nil {
|
|
||||||
logger.Errorf("insert last id : %v", err.Error())
|
|
||||||
tx.Rollback()
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
// 提交事务
|
|
||||||
tx.Commit()
|
|
||||||
return insertedID
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update 修改信息
|
|
||||||
func (r *NeVersionImpl) Update(neVersion model.NeVersion) int64 {
|
|
||||||
// 参数拼接
|
|
||||||
params := make(map[string]any)
|
|
||||||
if neVersion.NeType != "" {
|
|
||||||
params["ne_type"] = neVersion.NeType
|
|
||||||
}
|
|
||||||
if neVersion.NeId != "" {
|
|
||||||
params["ne_id"] = neVersion.NeId
|
|
||||||
}
|
|
||||||
if neVersion.Name != "" {
|
|
||||||
params["name"] = neVersion.Name
|
|
||||||
}
|
|
||||||
if neVersion.Version != "" {
|
|
||||||
params["version"] = neVersion.Version
|
|
||||||
}
|
|
||||||
if neVersion.Path != "" {
|
|
||||||
params["path"] = neVersion.Path
|
|
||||||
}
|
|
||||||
if neVersion.PreName != "" {
|
|
||||||
params["pre_name"] = neVersion.PreName
|
|
||||||
}
|
|
||||||
if neVersion.PreVersion != "" {
|
|
||||||
params["pre_version"] = neVersion.PreVersion
|
|
||||||
}
|
|
||||||
if neVersion.PrePath != "" {
|
|
||||||
params["pre_path"] = neVersion.PrePath
|
|
||||||
}
|
|
||||||
if neVersion.NewName != "" {
|
|
||||||
params["new_name"] = neVersion.NewName
|
|
||||||
}
|
|
||||||
if neVersion.NewVersion != "" {
|
|
||||||
params["new_version"] = neVersion.NewVersion
|
|
||||||
}
|
|
||||||
if neVersion.NewPath != "" {
|
|
||||||
params["new_path"] = neVersion.NewPath
|
|
||||||
}
|
|
||||||
if neVersion.Status != "" {
|
|
||||||
params["status"] = neVersion.Status
|
|
||||||
}
|
|
||||||
if neVersion.UpdateBy != "" {
|
|
||||||
params["update_by"] = neVersion.UpdateBy
|
|
||||||
params["update_time"] = time.Now().UnixMilli()
|
|
||||||
}
|
|
||||||
|
|
||||||
// 构建执行语句
|
|
||||||
keys, values := repo.KeyValueByUpdate(params)
|
|
||||||
sql := "update ne_version set " + strings.Join(keys, ",") + " where id = ?"
|
|
||||||
|
|
||||||
// 执行更新
|
|
||||||
values = append(values, neVersion.ID)
|
|
||||||
rows, err := datasource.ExecDB("", sql, values)
|
|
||||||
if err != nil {
|
|
||||||
logger.Errorf("update row : %v", err.Error())
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
return rows
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeleteByIds 批量删除信息
|
|
||||||
func (r *NeVersionImpl) DeleteByIds(cmdIds []string) int64 {
|
|
||||||
placeholder := repo.KeyPlaceholderByQuery(len(cmdIds))
|
|
||||||
sql := "delete from ne_version where id in (" + placeholder + ")"
|
|
||||||
parameters := repo.ConvertIdsSlice(cmdIds)
|
|
||||||
results, err := datasource.ExecDB("", sql, parameters)
|
|
||||||
if err != nil {
|
|
||||||
logger.Errorf("delete err => %v", err)
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
return results
|
|
||||||
}
|
|
||||||
@@ -283,9 +283,9 @@ func (r *NeInfoImpl) DeleteByIds(infoIds []string) (int64, error) {
|
|||||||
NewNeLicenseImpl.DeleteByIds([]string{neLicense.ID})
|
NewNeLicenseImpl.DeleteByIds([]string{neLicense.ID})
|
||||||
}
|
}
|
||||||
// 删除Version
|
// 删除Version
|
||||||
neVersion := NewNeVersionImpl.SelectByNeTypeAndNeID(v.NeType, v.NeId)
|
neVersion := NewNeVersion.SelectByNeTypeAndNeID(v.NeType, v.NeId)
|
||||||
if neVersion.NeId == v.NeId {
|
if neVersion.NeId == v.NeId {
|
||||||
NewNeVersionImpl.DeleteByIds([]string{neVersion.ID})
|
NewNeVersion.DeleteByIds([]string{neVersion.ID})
|
||||||
}
|
}
|
||||||
// 缓存信息删除
|
// 缓存信息删除
|
||||||
redis.Del("", fmt.Sprintf("%s%s:%s", cachekey.NE_KEY, v.NeType, v.NeId))
|
redis.Del("", fmt.Sprintf("%s%s:%s", cachekey.NE_KEY, v.NeType, v.NeId))
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ func (r *NeSoftwareImpl) Insert(neSoftware model.NeSoftware) string {
|
|||||||
inserId := r.neSoftwareRepository.Insert(neSoftware)
|
inserId := r.neSoftwareRepository.Insert(neSoftware)
|
||||||
if inserId != "" {
|
if inserId != "" {
|
||||||
// 更新同类型的新包版本
|
// 更新同类型的新包版本
|
||||||
neVersions := NewNeVersionImpl.SelectList(model.NeVersion{NeType: neSoftware.NeType})
|
neVersions := NewNeVersion.SelectList(model.NeVersion{NeType: neSoftware.NeType}, false)
|
||||||
if len(neVersions) > 0 {
|
if len(neVersions) > 0 {
|
||||||
for _, neVersion := range neVersions {
|
for _, neVersion := range neVersions {
|
||||||
neVersion.NewName = neSoftware.Name
|
neVersion.NewName = neSoftware.Name
|
||||||
@@ -55,7 +55,7 @@ func (r *NeSoftwareImpl) Insert(neSoftware model.NeSoftware) string {
|
|||||||
neVersion.NewPath = neSoftware.Path
|
neVersion.NewPath = neSoftware.Path
|
||||||
neVersion.Status = "3"
|
neVersion.Status = "3"
|
||||||
neVersion.UpdateBy = neSoftware.CreateBy
|
neVersion.UpdateBy = neSoftware.CreateBy
|
||||||
NewNeVersionImpl.Update(neVersion)
|
NewNeVersion.Update(neVersion)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -67,10 +67,10 @@ func (r *NeSoftwareImpl) Update(neSoftware model.NeSoftware) int64 {
|
|||||||
rows := r.neSoftwareRepository.Update(neSoftware)
|
rows := r.neSoftwareRepository.Update(neSoftware)
|
||||||
if rows > 0 {
|
if rows > 0 {
|
||||||
// 更新同类型的新包版本
|
// 更新同类型的新包版本
|
||||||
neVersions := NewNeVersionImpl.SelectList(model.NeVersion{
|
neVersions := NewNeVersion.SelectList(model.NeVersion{
|
||||||
NeType: neSoftware.NeType,
|
NeType: neSoftware.NeType,
|
||||||
Status: "3",
|
Status: "3",
|
||||||
})
|
}, false)
|
||||||
if len(neVersions) > 0 {
|
if len(neVersions) > 0 {
|
||||||
for _, neVersion := range neVersions {
|
for _, neVersion := range neVersions {
|
||||||
neVersion.NewName = neSoftware.Name
|
neVersion.NewName = neSoftware.Name
|
||||||
@@ -78,7 +78,7 @@ func (r *NeSoftwareImpl) Update(neSoftware model.NeSoftware) int64 {
|
|||||||
neVersion.NewPath = neSoftware.Path
|
neVersion.NewPath = neSoftware.Path
|
||||||
neVersion.Status = "3"
|
neVersion.Status = "3"
|
||||||
neVersion.UpdateBy = neSoftware.UpdateBy
|
neVersion.UpdateBy = neSoftware.UpdateBy
|
||||||
NewNeVersionImpl.Update(neVersion)
|
NewNeVersion.Update(neVersion)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -128,7 +128,7 @@ func (r *NeSoftwareImpl) CheckUniqueTypeAndNameAndVersion(neType, name, version,
|
|||||||
func (r *NeSoftwareImpl) UpdateVersions(neSoftware model.NeSoftware, neVersion model.NeVersion) int64 {
|
func (r *NeSoftwareImpl) UpdateVersions(neSoftware model.NeSoftware, neVersion model.NeVersion) int64 {
|
||||||
var rows int64 = 0
|
var rows int64 = 0
|
||||||
// 更新同类型的新包版本
|
// 更新同类型的新包版本
|
||||||
neVersions := NewNeVersionImpl.SelectList(neVersion)
|
neVersions := NewNeVersion.SelectList(neVersion, false)
|
||||||
if len(neVersions) > 0 {
|
if len(neVersions) > 0 {
|
||||||
for _, v := range neVersions {
|
for _, v := range neVersions {
|
||||||
v.NewName = neSoftware.Name
|
v.NewName = neSoftware.Name
|
||||||
@@ -136,7 +136,7 @@ func (r *NeSoftwareImpl) UpdateVersions(neSoftware model.NeSoftware, neVersion m
|
|||||||
v.NewPath = neSoftware.Path
|
v.NewPath = neSoftware.Path
|
||||||
v.Status = "3"
|
v.Status = "3"
|
||||||
v.UpdateBy = neVersion.UpdateBy
|
v.UpdateBy = neVersion.UpdateBy
|
||||||
rows += NewNeVersionImpl.Update(v)
|
rows += NewNeVersion.Update(v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return rows
|
return rows
|
||||||
|
|||||||
@@ -1,32 +1,697 @@
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import "be.ems/src/modules/network_element/model"
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
// INeVersion 网元版本信息 服务层接口
|
"be.ems/src/framework/utils/file"
|
||||||
type INeVersion interface {
|
"be.ems/src/framework/utils/ssh"
|
||||||
// SelectPage 根据条件分页查询字典类型
|
neFetchlink "be.ems/src/modules/network_element/fetch_link"
|
||||||
SelectPage(query map[string]any) map[string]any
|
"be.ems/src/modules/network_element/model"
|
||||||
|
"be.ems/src/modules/network_element/repository"
|
||||||
|
)
|
||||||
|
|
||||||
// SelectList 根据实体查询
|
// 实例化服务层 NeVersion 结构体
|
||||||
SelectList(neVersion model.NeVersion) []model.NeVersion
|
var NewNeVersion = &NeVersion{
|
||||||
|
neVersionRepository: repository.NewNeVersion,
|
||||||
// SelectById 通过ID查询
|
}
|
||||||
SelectById(id string) model.NeVersion
|
|
||||||
|
// NeVersion 网元版本信息 服务层处理
|
||||||
// Insert 新增信息
|
type NeVersion struct {
|
||||||
Insert(neVersion model.NeVersion) string
|
// 网元版本信息表
|
||||||
|
neVersionRepository *repository.NeVersion
|
||||||
// Update 修改信息
|
}
|
||||||
Update(neVersion model.NeVersion) int64
|
|
||||||
|
// SelectNeHostPage 分页查询列表数据
|
||||||
// DeleteByIds 批量删除信息
|
func (r *NeVersion) SelectPage(query map[string]any, checkVersion bool) map[string]any {
|
||||||
DeleteByIds(ids []string) (int64, error)
|
data := r.neVersionRepository.SelectPage(query)
|
||||||
|
|
||||||
// SelectByNeTypeAndNeID 通过网元类型和网元ID查询
|
// 网元直连检查更新网元服务版本
|
||||||
SelectByNeTypeAndNeID(neType, neId string) model.NeVersion
|
if checkVersion {
|
||||||
|
rows := data["rows"].([]model.NeVersion)
|
||||||
// Operate 操作版本上传到网元主机执行命令
|
r.checkNeVersion(&rows)
|
||||||
//
|
}
|
||||||
// action 安装行为:install upgrade rollback
|
|
||||||
Operate(action string, neVersion model.NeVersion, preinput map[string]string) (string, error)
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectConfigList 查询列表
|
||||||
|
func (r *NeVersion) SelectList(neVersion model.NeVersion, checkVersion bool) []model.NeVersion {
|
||||||
|
list := r.neVersionRepository.SelectList(neVersion)
|
||||||
|
|
||||||
|
// 网元直连检查更新网元服务版本
|
||||||
|
if checkVersion {
|
||||||
|
r.checkNeVersion(&list)
|
||||||
|
}
|
||||||
|
|
||||||
|
return list
|
||||||
|
}
|
||||||
|
|
||||||
|
// checkNeVersion 网元列表检查更新网元版本
|
||||||
|
func (r *NeVersion) checkNeVersion(arr *[]model.NeVersion) {
|
||||||
|
for i := range *arr {
|
||||||
|
item := (*arr)[i]
|
||||||
|
// 查询网元获取IP
|
||||||
|
neInfo := NewNeInfoImpl.SelectNeInfoByNeTypeAndNeID(item.NeType, item.NeId)
|
||||||
|
if neInfo.NeId != item.NeId || neInfo.IP == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
result, err := neFetchlink.NeState(neInfo)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if v, ok := result["version"]; ok && v != nil {
|
||||||
|
ver := v.(string)
|
||||||
|
if ver == item.Version {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
item.Name = "-"
|
||||||
|
item.Path = "-"
|
||||||
|
item.Version = ver
|
||||||
|
}
|
||||||
|
if item.NeType != neInfo.NeType || item.NeId != neInfo.NeId {
|
||||||
|
item.NeType = neInfo.NeType
|
||||||
|
item.NeId = neInfo.NeId
|
||||||
|
}
|
||||||
|
r.Update(item)
|
||||||
|
(*arr)[i] = item
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectByIds 通过ID查询
|
||||||
|
func (r *NeVersion) SelectById(id string) model.NeVersion {
|
||||||
|
if id == "" {
|
||||||
|
return model.NeVersion{}
|
||||||
|
}
|
||||||
|
neVersions := r.neVersionRepository.SelectByIds([]string{id})
|
||||||
|
if len(neVersions) > 0 {
|
||||||
|
return neVersions[0]
|
||||||
|
}
|
||||||
|
return model.NeVersion{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert 新增信息
|
||||||
|
func (r *NeVersion) Insert(neVersion model.NeVersion) string {
|
||||||
|
return r.neVersionRepository.Insert(neVersion)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update 修改信息
|
||||||
|
func (r *NeVersion) Update(neVersion model.NeVersion) int64 {
|
||||||
|
return r.neVersionRepository.Update(neVersion)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteByIds 批量删除信息
|
||||||
|
func (r *NeVersion) DeleteByIds(ids []string) (int64, error) {
|
||||||
|
// 检查是否存在
|
||||||
|
rowIds := r.neVersionRepository.SelectByIds(ids)
|
||||||
|
if len(rowIds) <= 0 {
|
||||||
|
return 0, fmt.Errorf("neVersion.noData")
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(rowIds) == len(ids) {
|
||||||
|
rows := r.neVersionRepository.DeleteByIds(ids)
|
||||||
|
return rows, nil
|
||||||
|
}
|
||||||
|
// 删除信息失败!
|
||||||
|
return 0, fmt.Errorf("delete fail")
|
||||||
|
}
|
||||||
|
|
||||||
|
// SelectByNeTypeAndNeID 通过网元类型和网元ID查询
|
||||||
|
func (r *NeVersion) SelectByNeTypeAndNeID(neType, neId string) model.NeVersion {
|
||||||
|
neVersions := r.neVersionRepository.SelectList(model.NeVersion{
|
||||||
|
NeType: neType,
|
||||||
|
NeId: neId,
|
||||||
|
})
|
||||||
|
if len(neVersions) > 0 {
|
||||||
|
return neVersions[0]
|
||||||
|
}
|
||||||
|
return model.NeVersion{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Operate 操作版本上传到网元主机执行命令
|
||||||
|
//
|
||||||
|
// action 安装行为:install upgrade rollback
|
||||||
|
func (r *NeVersion) 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
|
||||||
|
}
|
||||||
|
if action == "rollback" {
|
||||||
|
softwarePath = neVersion.PrePath
|
||||||
|
}
|
||||||
|
neFilePaths, err := r.operateFile(sshClient, softwarePath)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ========= 安装时设置 =========
|
||||||
|
if action == "install" {
|
||||||
|
// 网元公共配置文件
|
||||||
|
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", neVersion.NeType, neVersion.NeId)}); err != nil {
|
||||||
|
return "", fmt.Errorf("error wirte para5G file info")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ========= 命令生成阶段 =========
|
||||||
|
okFlagStr, cmdStrArr, err := r.operateCommand(action, neVersion.NeType, neFilePaths)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ========= 执行阶段 =========
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
// operateFile 操作版本-文件传输阶段
|
||||||
|
func (r *NeVersion) 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
|
||||||
|
}
|
||||||
|
|
||||||
|
// operateCommand 操作版本-命令生成阶段
|
||||||
|
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)
|
||||||
|
// 安装软件包
|
||||||
|
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", strings.Join(neFilePaths, " "))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 组合命令输入
|
||||||
|
cmdStrArr := []string{}
|
||||||
|
if neType == "OMC" {
|
||||||
|
omcStrArr := []string{}
|
||||||
|
if action == "install" {
|
||||||
|
// 安装软件包
|
||||||
|
pkgCmdStr = fmt.Sprintf("sudo M_PARAM=install dpkg -i %s", strings.Join(neFilePaths, " "))
|
||||||
|
if strings.HasSuffix(fileExt, "rpm") {
|
||||||
|
pkgCmdStr = fmt.Sprintf("sudo M_PARAM=install rpm -Uvh %s", strings.Join(neFilePaths, " "))
|
||||||
|
}
|
||||||
|
omcStrArr = append(omcStrArr, pkgCmdStr)
|
||||||
|
} else {
|
||||||
|
// 升级软件包
|
||||||
|
pkgCmdStr = fmt.Sprintf("sudo M_PARAM=upgrade dpkg -i %s", strings.Join(neFilePaths, " "))
|
||||||
|
if strings.HasSuffix(fileExt, "rpm") {
|
||||||
|
pkgCmdStr = fmt.Sprintf("sudo M_PARAM=upgrade rpm -Uvh %s", strings.Join(neFilePaths, " "))
|
||||||
|
}
|
||||||
|
omcStrArr = append(omcStrArr, pkgCmdStr)
|
||||||
|
}
|
||||||
|
// 删除软件包
|
||||||
|
omcStrArr = append(omcStrArr, fmt.Sprintf("sudo rm %s", strings.Join(neFilePaths, " ")))
|
||||||
|
|
||||||
|
// 2s后执行omc相关命令
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 2s && %s\" > /tmp/omc_%s.out 2>&1 & \n", strings.Join(omcStrArr, " && "), action))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("echo '%s' \n", okFlagStr))
|
||||||
|
return okFlagStr, cmdStrArr, nil
|
||||||
|
} else if neType == "IMS" {
|
||||||
|
if action == "install" {
|
||||||
|
para5GData := NewNeInfoImpl.Para5GData
|
||||||
|
cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n")
|
||||||
|
|
||||||
|
// 公网 PLMN地址
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("/usr/local/etc/ims/default/tools/modipplmn.sh %s %s %s \n", para5GData["SIP_IP"], para5GData["MCC"], para5GData["MNC"]))
|
||||||
|
// 内网 服务地址
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("/usr/local/etc/ims/default/tools/modintraip.sh %s \n", para5GData["IMS_IP"]))
|
||||||
|
// 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
|
||||||
|
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"]))
|
||||||
|
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 pcrf", 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 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 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 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 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 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))
|
||||||
|
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, "ims-stop || true && ims-start \n")
|
||||||
|
// 30s后停止服务
|
||||||
|
// cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 30s && sudo ims-stop\" > /dev/null 2>&1 & \n")
|
||||||
|
} else {
|
||||||
|
cmdStrArr = append(cmdStrArr, "ims-stop \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, "ims-start \n")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if action == "install" {
|
||||||
|
para5GData := NewNeInfoImpl.Para5GData
|
||||||
|
cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n")
|
||||||
|
|
||||||
|
// AMF配置修改
|
||||||
|
if neTypeLower == "amf" {
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/amf/default/amfcfg.yaml /usr/local/etc/amf/amfcfg.yaml \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["AMF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.120/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["N2_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["MCC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["MNC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SST"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SD"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/- 4388/- %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["TAC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["AUSF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["UDM_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SMF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["PCF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["NRF_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/- 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配置修改
|
||||||
|
if neTypeLower == "ausf" {
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/ausf/default/ausfcfg.yaml /usr/local/etc/ausf/ausfcfg.yaml \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["AUSF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["UDM_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["NRF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["MCC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["MNC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s ausf' /etc/hosts || echo '%s ausf' | sudo tee -a /etc/hosts \n", para5GData["AUSF_IP"], para5GData["AUSF_IP"]))
|
||||||
|
}
|
||||||
|
// UDM配置修改
|
||||||
|
if neTypeLower == "udm" {
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/udmcfg.yaml /usr/local/etc/udm/udmcfg.yaml \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/nssai.yaml /usr/local/etc/udm/nssai.yaml \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/snssai.yaml /usr/local/etc/udm/snssai.yaml \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/as.yaml /usr/local/etc/udm/as.yaml \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/dnn.yaml /usr/local/etc/udm/dnn.yaml \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/scscfSet.yaml /usr/local/etc/udm/scscfSet.yaml \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["NRF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["UDM_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["AUSF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["AMF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["MCC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["MNC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/udm/udmcfg.yaml \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/udm/as.yaml \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/udm/scscfSet.yaml \n", para5GData["MNC_DOMAIN"], para5GData["MCC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/udm/nssai.yaml \n", para5GData["SST"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["SST"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/udm/nssai.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: 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.8.110/%s/g\" /usr/local/etc/udm/as.yaml \n", para5GData["SIP_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s udm' /etc/hosts || echo '%s udm' | sudo tee -a /etc/hosts \n", para5GData["UDM_IP"], para5GData["UDM_IP"]))
|
||||||
|
}
|
||||||
|
// SMF配置修改
|
||||||
|
if neTypeLower == "smf" {
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/smf/default/smf_conf.yaml /usr/local/etc/smf/smf_conf.yaml \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.110/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["SIP_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["AMF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UDM_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["SMF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["PCF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["NRF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UPF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|10.2.1.0/24|%s|g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UE_POOL"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/internet/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["DNN_DATA"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s smf' /etc/hosts || echo '%s smf' | sudo tee -a /etc/hosts \n", para5GData["SMF_IP"], para5GData["SMF_IP"]))
|
||||||
|
}
|
||||||
|
// PCF配置修改
|
||||||
|
if neTypeLower == "pcf" {
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/pcf/default/pcfcfg.yaml /usr/local/etc/pcf/pcfcfg.yaml \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["AMF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["UDM_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["PCF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["NRF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.210/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["NEF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MCC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MNC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MNC_DOMAIN"], para5GData["MCC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s pcf' /etc/hosts || echo '%s pcf' | sudo tee -a /etc/hosts \n", para5GData["PCF_IP"], para5GData["PCF_IP"]))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NSSF配置修改
|
||||||
|
if neTypeLower == "nssf" {
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nssf/default/nssfcfg.yaml /usr/local/etc/nssf/nssfcfg.yaml \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.170/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["NSSF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["NRF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["MCC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["MNC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nssf' /etc/hosts || echo '%s nssf' | sudo tee -a /etc/hosts \n", para5GData["NSSF_IP"], para5GData["NSSF_IP"]))
|
||||||
|
}
|
||||||
|
// NRF配置修改
|
||||||
|
if neTypeLower == "nrf" {
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nrf/default/nrfcfg.yaml /usr/local/etc/nrf/nrfcfg.yaml \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["NRF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["MCC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["MNC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nrf' /etc/hosts || echo '%s nrf' | sudo tee -a /etc/hosts \n", para5GData["NRF_IP"], para5GData["NRF_IP"]))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UPF配置修改
|
||||||
|
if neTypeLower == "upf" {
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfcfg.yaml /usr/local/etc/upf/upfcfg.yaml \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfForwarder_1.yaml /usr/local/etc/upf/upfForwarder_1.yaml \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/upf/upfcfg.yaml \n", para5GData["UPF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/localhost/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UPF_IP"]))
|
||||||
|
// UE
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4: 10.2.1.0/s/ueIpv4: 10.2.1.0/ueIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4Mask: 255.255.255.0/s/ueIpv4Mask: 255.255.255.0/ueIpv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_MASK"]))
|
||||||
|
// N3
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.190/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_MASK"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_GW"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_PCI"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_MAC"]))
|
||||||
|
// 标准版 N6
|
||||||
|
if para5GData["UPF_TYPE"] == "StandardUPF" {
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.191/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MASK"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_GW"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_PCI"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MAC"]))
|
||||||
|
// 路由
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo ip route add '%s/%s' via '%s' \n", para5GData["UE_IP"], para5GData["UE_CIDR"], para5GData["N6_IP"]))
|
||||||
|
}
|
||||||
|
// 轻量版
|
||||||
|
if para5GData["UPF_TYPE"] == "LightUPF" {
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/192.168.8.191/0.0.0.0/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/type: upfd/type: tun/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 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"]))
|
||||||
|
}
|
||||||
|
|
||||||
|
// LMF配置修改 - 已不再维护,导致激活License失败
|
||||||
|
// NEF配置修改 - SNMP无需License
|
||||||
|
if neTypeLower == "nef" {
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nef/default/nef_conf.yaml /usr/local/etc/nef/nef_conf.yaml \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.110/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["IMS_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["AMF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["AUSF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["UDM_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["SMF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["PCF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.170/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["NSSF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["NRF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["UPF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.210/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["NEF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nef' /etc/hosts || echo '%s nef' | sudo tee -a /etc/hosts \n", para5GData["NEF_IP"], para5GData["NEF_IP"]))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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, 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|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|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["MME_IP"]))
|
||||||
|
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/\"00101\"/\"%s%s\"/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MCC"], para5GData["MNC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MCC=\"001\"/MCC=\"%s\"/g' /usr/local/etc/mme/mme.conf \n", para5GData["MCC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MCC = \"001\"/MCC = \"%s\"/g' /usr/local/etc/mme/mme.conf \n", para5GData["MCC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MNC=\"01\";/MNC=\"%s\";/g' /usr/local/etc/mme/mme.conf \n", para5GData["MNC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MNC = \"01\";/MNC = \"%s\";/g' /usr/local/etc/mme/mme.conf \n", 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"]))
|
||||||
|
// 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["MME_IP"], para5GData["MME_IP"]))
|
||||||
|
}
|
||||||
|
// N3IWF配置修改
|
||||||
|
if neTypeLower == "n3iwf" {
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/n3iwf/default/n3iwfcfg.yaml /usr/local/etc/n3iwf/n3iwfcfg.yaml \n")
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MCC: 001/MCC: %s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["MCC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MNC: 01/MNC: %s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["MNC"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.12.161/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N3IWF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.12.160/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N3IWF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.27/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["UDM_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.1.239/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["SMF_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.22/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N2_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.1.161/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N3_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.1.160/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N6_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s n3iwf' /etc/hosts || echo '%s n3iwf' | sudo tee -a /etc/hosts \n", para5GData["N3IWF_IP"], para5GData["N3IWF_IP"]))
|
||||||
|
}
|
||||||
|
|
||||||
|
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))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 安装操作有redis安装时需要重启
|
||||||
|
if action == "install" && (neTypeLower == "ims" || neTypeLower == "udm") {
|
||||||
|
// adb
|
||||||
|
if strings.Contains(pkgCmdStr, "adb") {
|
||||||
|
para5GData := NewNeInfoImpl.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 127.0.0.1 %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 := NewNeInfoImpl.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 127.0.0.1 %s/g\" /usr/local/etc/kvdb/kvdb.conf \n", para5GData["DB_IP"]))
|
||||||
|
cmdStrArr = append(cmdStrArr, "sudo service kvdb restart \n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除软件包
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo rm %s \n", strings.Join(neFilePaths, " ")))
|
||||||
|
// 结束
|
||||||
|
cmdStrArr = append(cmdStrArr, fmt.Sprintf("echo '%s' \n", okFlagStr))
|
||||||
|
|
||||||
|
return okFlagStr, cmdStrArr, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// operateRun 操作版本-执行阶段
|
||||||
|
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 {
|
||||||
|
return "", fmt.Errorf("neinfo ssh client session new err")
|
||||||
|
}
|
||||||
|
defer clientSession.Close()
|
||||||
|
|
||||||
|
firstRead := true // 首次命令进行记录日志信息
|
||||||
|
commandLineText := "" // 日志信息
|
||||||
|
done := make(chan bool) // 完成信号
|
||||||
|
// 超时退出 120s
|
||||||
|
timeoutTicker := time.NewTicker(120 * time.Second)
|
||||||
|
defer timeoutTicker.Stop()
|
||||||
|
// 实时读取SSH消息直接输出
|
||||||
|
msTicker := time.NewTicker(100 * time.Millisecond)
|
||||||
|
defer msTicker.Stop()
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-timeoutTicker.C:
|
||||||
|
done <- true
|
||||||
|
return
|
||||||
|
case <-msTicker.C:
|
||||||
|
outputByte := clientSession.Read()
|
||||||
|
if len(outputByte) > 0 {
|
||||||
|
outputStr := string(outputByte)
|
||||||
|
// 非首次进行记录命令
|
||||||
|
if !firstRead {
|
||||||
|
commandLineText += outputStr
|
||||||
|
}
|
||||||
|
|
||||||
|
// IMS预输入
|
||||||
|
if neType == "IMS" {
|
||||||
|
// IMS包 P/I/S-CSCF Config 配置覆盖
|
||||||
|
if 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 {
|
||||||
|
clientSession.Write("y \n")
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// MF包 etc下目录覆盖
|
||||||
|
if strings.Contains(outputStr, "/usr/local/etc/mf directory? (Yes/No, default: No)") {
|
||||||
|
if pisCSCF, ok := preinput["updateMFetc"]; ok && pisCSCF != "" {
|
||||||
|
clientSession.Write(fmt.Sprintf("%s \n", pisCSCF))
|
||||||
|
} else {
|
||||||
|
clientSession.Write("No \n")
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// MF包 share下目录覆盖
|
||||||
|
if strings.Contains(outputStr, "/usr/local/share/mf directory? (Yes/No, default: No)") {
|
||||||
|
if pisCSCF, ok := preinput["updateMFshare"]; ok && pisCSCF != "" {
|
||||||
|
clientSession.Write(fmt.Sprintf("%s \n", pisCSCF))
|
||||||
|
} else {
|
||||||
|
clientSession.Write("No \n")
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 命令终止符后继续执行命令
|
||||||
|
suffix := strings.HasSuffix(outputStr, "~]# ") || strings.HasSuffix(outputStr, "~$ ")
|
||||||
|
if len(cmdStrArr) > 0 && suffix {
|
||||||
|
if firstRead {
|
||||||
|
firstRead = false
|
||||||
|
}
|
||||||
|
shiftElement := cmdStrArr[0] // 获取第一个元素
|
||||||
|
cmdStrArr = cmdStrArr[1:] // 将第一个元素从切片中移除
|
||||||
|
clientSession.Write(shiftElement)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// 最后输出的退出标记
|
||||||
|
if strings.LastIndex(outputStr, okFlagStr) > 5 {
|
||||||
|
done <- true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
// 等待写入协程完成
|
||||||
|
<-done
|
||||||
|
|
||||||
|
return commandLineText, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// operateDome 操作版本-完成阶段
|
||||||
|
func (r *NeVersion) 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.NeConfOAMWirteSync(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"
|
||||||
|
r.Update(verInfo)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,650 +0,0 @@
|
|||||||
package service
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
"strings"
|
|
||||||
"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"
|
|
||||||
)
|
|
||||||
|
|
||||||
// 实例化服务层 NeVersionImpl 结构体
|
|
||||||
var NewNeVersionImpl = &NeVersionImpl{
|
|
||||||
neVersionRepository: repository.NewNeVersionImpl,
|
|
||||||
}
|
|
||||||
|
|
||||||
// NeVersionImpl 网元版本信息 服务层处理
|
|
||||||
type NeVersionImpl struct {
|
|
||||||
// 网元版本信息表
|
|
||||||
neVersionRepository repository.INeVersion
|
|
||||||
}
|
|
||||||
|
|
||||||
// SelectNeHostPage 分页查询列表数据
|
|
||||||
func (r *NeVersionImpl) SelectPage(query map[string]any) map[string]any {
|
|
||||||
return r.neVersionRepository.SelectPage(query)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SelectConfigList 查询列表
|
|
||||||
func (r *NeVersionImpl) SelectList(neVersion model.NeVersion) []model.NeVersion {
|
|
||||||
return r.neVersionRepository.SelectList(neVersion)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SelectByIds 通过ID查询
|
|
||||||
func (r *NeVersionImpl) SelectById(id string) model.NeVersion {
|
|
||||||
if id == "" {
|
|
||||||
return model.NeVersion{}
|
|
||||||
}
|
|
||||||
neVersions := r.neVersionRepository.SelectByIds([]string{id})
|
|
||||||
if len(neVersions) > 0 {
|
|
||||||
return neVersions[0]
|
|
||||||
}
|
|
||||||
return model.NeVersion{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Insert 新增信息
|
|
||||||
func (r *NeVersionImpl) Insert(neVersion model.NeVersion) string {
|
|
||||||
return r.neVersionRepository.Insert(neVersion)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update 修改信息
|
|
||||||
func (r *NeVersionImpl) Update(neVersion model.NeVersion) int64 {
|
|
||||||
return r.neVersionRepository.Update(neVersion)
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeleteByIds 批量删除信息
|
|
||||||
func (r *NeVersionImpl) DeleteByIds(ids []string) (int64, error) {
|
|
||||||
// 检查是否存在
|
|
||||||
rowIds := r.neVersionRepository.SelectByIds(ids)
|
|
||||||
if len(rowIds) <= 0 {
|
|
||||||
return 0, fmt.Errorf("neVersion.noData")
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(rowIds) == len(ids) {
|
|
||||||
rows := r.neVersionRepository.DeleteByIds(ids)
|
|
||||||
return rows, nil
|
|
||||||
}
|
|
||||||
// 删除信息失败!
|
|
||||||
return 0, fmt.Errorf("delete fail")
|
|
||||||
}
|
|
||||||
|
|
||||||
// SelectByNeTypeAndNeID 通过网元类型和网元ID查询
|
|
||||||
func (r *NeVersionImpl) SelectByNeTypeAndNeID(neType, neId string) model.NeVersion {
|
|
||||||
neVersions := r.neVersionRepository.SelectList(model.NeVersion{
|
|
||||||
NeType: neType,
|
|
||||||
NeId: neId,
|
|
||||||
})
|
|
||||||
if len(neVersions) > 0 {
|
|
||||||
return neVersions[0]
|
|
||||||
}
|
|
||||||
return model.NeVersion{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Operate 操作版本上传到网元主机执行命令
|
|
||||||
//
|
|
||||||
// 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
|
|
||||||
}
|
|
||||||
if action == "rollback" {
|
|
||||||
softwarePath = neVersion.PrePath
|
|
||||||
}
|
|
||||||
neFilePaths, err := r.operateFile(sshClient, softwarePath)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
// ========= 安装时设置 =========
|
|
||||||
if action == "install" {
|
|
||||||
// 网元公共配置文件
|
|
||||||
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", neVersion.NeType, neVersion.NeId)}); err != nil {
|
|
||||||
return "", fmt.Errorf("error wirte para5G file info")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ========= 命令生成阶段 =========
|
|
||||||
okFlagStr, cmdStrArr, err := r.operateCommand(action, neVersion.NeType, neFilePaths)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
// ========= 执行阶段 =========
|
|
||||||
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", strings.Join(neFilePaths, " "))
|
|
||||||
fileExt := filepath.Ext(strings.ToLower(neFilePaths[0]))
|
|
||||||
if strings.HasSuffix(fileExt, "rpm") {
|
|
||||||
pkgCmdStr = fmt.Sprintf("sudo rpm -Uvh %s", strings.Join(neFilePaths, " "))
|
|
||||||
}
|
|
||||||
|
|
||||||
// 组合命令输入
|
|
||||||
cmdStrArr := []string{}
|
|
||||||
if neType == "OMC" {
|
|
||||||
omcStrArr := []string{}
|
|
||||||
if action == "install" {
|
|
||||||
// 安装软件包
|
|
||||||
pkgCmdStr = fmt.Sprintf("sudo M_PARAM=install dpkg -i %s", strings.Join(neFilePaths, " "))
|
|
||||||
if strings.HasSuffix(fileExt, "rpm") {
|
|
||||||
pkgCmdStr = fmt.Sprintf("sudo M_PARAM=install rpm -Uvh %s", strings.Join(neFilePaths, " "))
|
|
||||||
}
|
|
||||||
omcStrArr = append(omcStrArr, pkgCmdStr)
|
|
||||||
} else {
|
|
||||||
// 升级软件包
|
|
||||||
pkgCmdStr = fmt.Sprintf("sudo M_PARAM=upgrade dpkg -i %s", strings.Join(neFilePaths, " "))
|
|
||||||
if strings.HasSuffix(fileExt, "rpm") {
|
|
||||||
pkgCmdStr = fmt.Sprintf("sudo M_PARAM=upgrade rpm -Uvh %s", strings.Join(neFilePaths, " "))
|
|
||||||
}
|
|
||||||
omcStrArr = append(omcStrArr, pkgCmdStr)
|
|
||||||
}
|
|
||||||
// 删除软件包
|
|
||||||
omcStrArr = append(omcStrArr, fmt.Sprintf("sudo rm %s", strings.Join(neFilePaths, " ")))
|
|
||||||
|
|
||||||
// 2s后执行omc相关命令
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("nohup sh -c \"sleep 2s && %s\" > /tmp/omc_%s.out 2>&1 & \n", strings.Join(omcStrArr, " && "), action))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("echo '%s' \n", okFlagStr))
|
|
||||||
return okFlagStr, cmdStrArr, nil
|
|
||||||
} else if neType == "IMS" {
|
|
||||||
if action == "install" {
|
|
||||||
para5GData := NewNeInfoImpl.Para5GData
|
|
||||||
cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n")
|
|
||||||
|
|
||||||
// 公网 PLMN地址
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("/usr/local/etc/ims/default/tools/modipplmn.sh %s %s %s \n", para5GData["SIP_IP"], para5GData["MCC"], para5GData["MNC"]))
|
|
||||||
// 内网 服务地址
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("/usr/local/etc/ims/default/tools/modintraip.sh %s \n", para5GData["IMS_IP"]))
|
|
||||||
// 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
|
|
||||||
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"]))
|
|
||||||
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 pcrf", 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 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 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 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 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 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))
|
|
||||||
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, "ims-stop || true && ims-start \n")
|
|
||||||
// 30s后停止服务
|
|
||||||
// cmdStrArr = append(cmdStrArr, "nohup sh -c \"sleep 30s && sudo ims-stop\" > /dev/null 2>&1 & \n")
|
|
||||||
} else {
|
|
||||||
cmdStrArr = append(cmdStrArr, "ims-stop \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, "ims-start \n")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if action == "install" {
|
|
||||||
para5GData := NewNeInfoImpl.Para5GData
|
|
||||||
cmdStrArr = append(cmdStrArr, pkgCmdStr+" \n")
|
|
||||||
|
|
||||||
// AMF配置修改
|
|
||||||
if neTypeLower == "amf" {
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/amf/default/amfcfg.yaml /usr/local/etc/amf/amfcfg.yaml \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["AMF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.120/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["N2_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["MCC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["MNC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SST"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SD"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/- 4388/- %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["TAC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["AUSF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["UDM_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SMF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["PCF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["NRF_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/- 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配置修改
|
|
||||||
if neTypeLower == "ausf" {
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/ausf/default/ausfcfg.yaml /usr/local/etc/ausf/ausfcfg.yaml \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["AUSF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["UDM_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["NRF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["MCC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/ausf/ausfcfg.yaml \n", para5GData["MNC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s ausf' /etc/hosts || echo '%s ausf' | sudo tee -a /etc/hosts \n", para5GData["AUSF_IP"], para5GData["AUSF_IP"]))
|
|
||||||
}
|
|
||||||
// UDM配置修改
|
|
||||||
if neTypeLower == "udm" {
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/udmcfg.yaml /usr/local/etc/udm/udmcfg.yaml \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/nssai.yaml /usr/local/etc/udm/nssai.yaml \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/snssai.yaml /usr/local/etc/udm/snssai.yaml \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/as.yaml /usr/local/etc/udm/as.yaml \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/dnn.yaml /usr/local/etc/udm/dnn.yaml \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/udm/default/scscfSet.yaml /usr/local/etc/udm/scscfSet.yaml \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["NRF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["UDM_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["AUSF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["AMF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["MCC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/udm/udmcfg.yaml \n", para5GData["MNC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/udm/udmcfg.yaml \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/udm/as.yaml \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/udm/scscfSet.yaml \n", para5GData["MNC_DOMAIN"], para5GData["MCC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/udm/nssai.yaml \n", para5GData["SST"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/udm/snssai.yaml \n", para5GData["SST"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/udm/nssai.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: 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.8.110/%s/g\" /usr/local/etc/udm/as.yaml \n", para5GData["SIP_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s udm' /etc/hosts || echo '%s udm' | sudo tee -a /etc/hosts \n", para5GData["UDM_IP"], para5GData["UDM_IP"]))
|
|
||||||
}
|
|
||||||
// SMF配置修改
|
|
||||||
if neTypeLower == "smf" {
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/smf/default/smf_conf.yaml /usr/local/etc/smf/smf_conf.yaml \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.110/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["SIP_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["AMF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UDM_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["SMF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["PCF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["NRF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UPF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s|10.2.1.0/24|%s|g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["UE_POOL"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/internet/%s/g\" /usr/local/etc/smf/smf_conf.yaml \n", para5GData["DNN_DATA"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s smf' /etc/hosts || echo '%s smf' | sudo tee -a /etc/hosts \n", para5GData["SMF_IP"], para5GData["SMF_IP"]))
|
|
||||||
}
|
|
||||||
// PCF配置修改
|
|
||||||
if neTypeLower == "pcf" {
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/pcf/default/pcfcfg.yaml /usr/local/etc/pcf/pcfcfg.yaml \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["AMF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["UDM_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["PCF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["NRF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.210/%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["NEF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MCC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MNC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc001.mcc001/mnc%s.mcc%s/g\" /usr/local/etc/pcf/pcfcfg.yaml \n", para5GData["MNC_DOMAIN"], para5GData["MCC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s pcf' /etc/hosts || echo '%s pcf' | sudo tee -a /etc/hosts \n", para5GData["PCF_IP"], para5GData["PCF_IP"]))
|
|
||||||
}
|
|
||||||
|
|
||||||
// NSSF配置修改
|
|
||||||
if neTypeLower == "nssf" {
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nssf/default/nssfcfg.yaml /usr/local/etc/nssf/nssfcfg.yaml \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.170/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["NSSF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["NRF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["MCC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nssf/nssfcfg.yaml \n", para5GData["MNC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nssf' /etc/hosts || echo '%s nssf' | sudo tee -a /etc/hosts \n", para5GData["NSSF_IP"], para5GData["NSSF_IP"]))
|
|
||||||
}
|
|
||||||
// NRF配置修改
|
|
||||||
if neTypeLower == "nrf" {
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nrf/default/nrfcfg.yaml /usr/local/etc/nrf/nrfcfg.yaml \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["NRF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mcc: 001/mcc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["MCC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/mnc: 01/mnc: %s/g\" /usr/local/etc/nrf/nrfcfg.yaml \n", para5GData["MNC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nrf' /etc/hosts || echo '%s nrf' | sudo tee -a /etc/hosts \n", para5GData["NRF_IP"], para5GData["NRF_IP"]))
|
|
||||||
}
|
|
||||||
|
|
||||||
// UPF配置修改
|
|
||||||
if neTypeLower == "upf" {
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfcfg.yaml /usr/local/etc/upf/upfcfg.yaml \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/upf/default/upfForwarder_1.yaml /usr/local/etc/upf/upfForwarder_1.yaml \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/upf/upfcfg.yaml \n", para5GData["UPF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/localhost/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UPF_IP"]))
|
|
||||||
// UE
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4: 10.2.1.0/s/ueIpv4: 10.2.1.0/ueIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ueIpv4Mask: 255.255.255.0/s/ueIpv4Mask: 255.255.255.0/ueIpv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["UE_MASK"]))
|
|
||||||
// N3
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.190/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_MASK"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_GW"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_PCI"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N3\"/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N3_MAC"]))
|
|
||||||
// 标准版 N6
|
|
||||||
if para5GData["UPF_TYPE"] == "StandardUPF" {
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.191/%s/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/ipv4Mask: 255.255.240.0/s/ipv4Mask: 255.255.240.0/ipv4Mask: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MASK"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/gatewayIpv4: 192.168.1.254/s/gatewayIpv4: 192.168.1.254/gatewayIpv4: %s/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_GW"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/interfacePCI: \"0000:00:00.0\"/s/interfacePCI: \"0000:00:00.0\"/interfacePCI: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_PCI"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i '/- interfaceType: \"N6\"/,/macAddr: \"00:00:00:00:00:00\"/s/macAddr: \"00:00:00:00:00:00\"/macAddr: \"%s\"/' /usr/local/etc/upf/upfForwarder_1.yaml \n", para5GData["N6_MAC"]))
|
|
||||||
// 路由
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo ip route add '%s/%s' via '%s' \n", para5GData["UE_IP"], para5GData["UE_CIDR"], para5GData["N6_IP"]))
|
|
||||||
}
|
|
||||||
// 轻量版
|
|
||||||
if para5GData["UPF_TYPE"] == "LightUPF" {
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/192.168.8.191/0.0.0.0/g\" /usr/local/etc/upf/upfForwarder_1.yaml \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo sed -i \"s/type: upfd/type: tun/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 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"]))
|
|
||||||
}
|
|
||||||
|
|
||||||
// LMF配置修改 - 已不再维护,导致激活License失败
|
|
||||||
// NEF配置修改 - SNMP无需License
|
|
||||||
if neTypeLower == "nef" {
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/nef/default/nef_conf.yaml /usr/local/etc/nef/nef_conf.yaml \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.110/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["IMS_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.120/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["AMF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["AUSF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["UDM_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["SMF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.160/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["PCF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.170/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["NSSF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.180/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["NRF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.190/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["UPF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.210/%s/g\" /usr/local/etc/nef/nef_conf.yaml \n", para5GData["NEF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s nef' /etc/hosts || echo '%s nef' | sudo tee -a /etc/hosts \n", para5GData["NEF_IP"], para5GData["NEF_IP"]))
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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, 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|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|%s|g\" /usr/local/etc/mme/mme.conf \n", para5GData["MME_IP"]))
|
|
||||||
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/\"00101\"/\"%s%s\"/g\" /usr/local/etc/mme/mme.conf \n", para5GData["MCC"], para5GData["MNC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MCC=\"001\"/MCC=\"%s\"/g' /usr/local/etc/mme/mme.conf \n", para5GData["MCC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MCC = \"001\"/MCC = \"%s\"/g' /usr/local/etc/mme/mme.conf \n", para5GData["MCC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MNC=\"01\";/MNC=\"%s\";/g' /usr/local/etc/mme/mme.conf \n", para5GData["MNC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/MNC = \"01\";/MNC = \"%s\";/g' /usr/local/etc/mme/mme.conf \n", 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"]))
|
|
||||||
// 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["MME_IP"], para5GData["MME_IP"]))
|
|
||||||
}
|
|
||||||
// N3IWF配置修改
|
|
||||||
if neTypeLower == "n3iwf" {
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo cp /usr/local/etc/n3iwf/default/n3iwfcfg.yaml /usr/local/etc/n3iwf/n3iwfcfg.yaml \n")
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MCC: 001/MCC: %s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["MCC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/MNC: 01/MNC: %s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["MNC"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.12.161/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N3IWF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.12.160/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N3IWF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.27/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["UDM_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.1.239/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["SMF_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.8.22/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N2_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.1.161/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N3_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/192.168.1.160/%s/g\" /usr/local/etc/n3iwf/n3iwfcfg.yaml \n", para5GData["N6_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s n3iwf' /etc/hosts || echo '%s n3iwf' | sudo tee -a /etc/hosts \n", para5GData["N3IWF_IP"], para5GData["N3IWF_IP"]))
|
|
||||||
}
|
|
||||||
|
|
||||||
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))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 安装操作有redis安装时需要重启
|
|
||||||
if action == "install" && (neTypeLower == "ims" || neTypeLower == "udm") {
|
|
||||||
// adb
|
|
||||||
if strings.Contains(pkgCmdStr, "adb") {
|
|
||||||
para5GData := NewNeInfoImpl.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 127.0.0.1 %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 := NewNeInfoImpl.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 127.0.0.1 %s/g\" /usr/local/etc/kvdb/kvdb.conf \n", para5GData["DB_IP"]))
|
|
||||||
cmdStrArr = append(cmdStrArr, "sudo service kvdb restart \n")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 删除软件包
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo rm %s \n", strings.Join(neFilePaths, " ")))
|
|
||||||
// 结束
|
|
||||||
cmdStrArr = append(cmdStrArr, fmt.Sprintf("echo '%s' \n", okFlagStr))
|
|
||||||
|
|
||||||
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(127, 42)
|
|
||||||
if err != nil {
|
|
||||||
return "", fmt.Errorf("neinfo ssh client session new err")
|
|
||||||
}
|
|
||||||
defer clientSession.Close()
|
|
||||||
|
|
||||||
firstRead := true // 首次命令进行记录日志信息
|
|
||||||
commandLineText := "" // 日志信息
|
|
||||||
done := make(chan bool) // 完成信号
|
|
||||||
// 超时退出 120s
|
|
||||||
timeoutTicker := time.NewTicker(120 * time.Second)
|
|
||||||
defer timeoutTicker.Stop()
|
|
||||||
// 实时读取SSH消息直接输出
|
|
||||||
msTicker := time.NewTicker(100 * time.Millisecond)
|
|
||||||
defer msTicker.Stop()
|
|
||||||
go func() {
|
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case <-timeoutTicker.C:
|
|
||||||
done <- true
|
|
||||||
return
|
|
||||||
case <-msTicker.C:
|
|
||||||
outputByte := clientSession.Read()
|
|
||||||
if len(outputByte) > 0 {
|
|
||||||
outputStr := string(outputByte)
|
|
||||||
// 非首次进行记录命令
|
|
||||||
if !firstRead {
|
|
||||||
commandLineText += outputStr
|
|
||||||
}
|
|
||||||
|
|
||||||
// IMS预输入
|
|
||||||
if neType == "IMS" {
|
|
||||||
// IMS包 P/I/S-CSCF Config 配置覆盖
|
|
||||||
if 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 {
|
|
||||||
clientSession.Write("y \n")
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
// MF包 etc下目录覆盖
|
|
||||||
if strings.Contains(outputStr, "/usr/local/etc/mf directory? (Yes/No, default: No)") {
|
|
||||||
if pisCSCF, ok := preinput["updateMFetc"]; ok && pisCSCF != "" {
|
|
||||||
clientSession.Write(fmt.Sprintf("%s \n", pisCSCF))
|
|
||||||
} else {
|
|
||||||
clientSession.Write("No \n")
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
// MF包 share下目录覆盖
|
|
||||||
if strings.Contains(outputStr, "/usr/local/share/mf directory? (Yes/No, default: No)") {
|
|
||||||
if pisCSCF, ok := preinput["updateMFshare"]; ok && pisCSCF != "" {
|
|
||||||
clientSession.Write(fmt.Sprintf("%s \n", pisCSCF))
|
|
||||||
} else {
|
|
||||||
clientSession.Write("No \n")
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 命令终止符后继续执行命令
|
|
||||||
suffix := strings.HasSuffix(outputStr, "~]# ") || strings.HasSuffix(outputStr, "~$ ")
|
|
||||||
if len(cmdStrArr) > 0 && suffix {
|
|
||||||
if firstRead {
|
|
||||||
firstRead = false
|
|
||||||
}
|
|
||||||
shiftElement := cmdStrArr[0] // 获取第一个元素
|
|
||||||
cmdStrArr = cmdStrArr[1:] // 将第一个元素从切片中移除
|
|
||||||
clientSession.Write(shiftElement)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
// 最后输出的退出标记
|
|
||||||
if strings.LastIndex(outputStr, okFlagStr) > 5 {
|
|
||||||
done <- true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
// 等待写入协程完成
|
|
||||||
<-done
|
|
||||||
|
|
||||||
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.NeConfOAMWirteSync(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