diff --git a/src/modules/network_element/service/ne_info.go b/src/modules/network_element/service/ne_info.go index 147df3c5..b3e9838c 100644 --- a/src/modules/network_element/service/ne_info.go +++ b/src/modules/network_element/service/ne_info.go @@ -2,6 +2,7 @@ package service import ( "be.ems/src/framework/utils/ssh" + "be.ems/src/framework/utils/telnet" "be.ems/src/modules/network_element/model" ) @@ -47,12 +48,16 @@ type INeInfo interface { // CheckUniqueNeTypeAndNeId 校验同类型下标识是否唯一 CheckUniqueNeTypeAndNeId(neType, neId, id string) bool - // NeRunSSHClient 网元主机的SSH客户端-为创建相关连接 + // NeRunSSHClient 网元主机的SSH客户端-为创建相关连接,注意结束后 Close() NeRunSSHClient(neType, neId string) (*ssh.ConnSSH, error) // NeRunSSHCmd 网元主机的SSH客户端发送cmd命令 NeRunSSHCmd(neType, neId, cmd string) (string, error) + // NeRunTelnetClient 网元主机的Telnet客户端-为创建相关连接,注意结束后 Close() + // num 是网元主机telnet 1:4100 2:5200 + NeRunTelnetClient(neType, neId string, num int) (*telnet.ConnTelnet, error) + // neConfOAMRead 网元OAM配置文件读取 NeConfOAMRead(neType, neId string) (map[string]any, error) diff --git a/src/modules/network_element/service/ne_info.impl.go b/src/modules/network_element/service/ne_info.impl.go index a1801d6e..c69eb183 100644 --- a/src/modules/network_element/service/ne_info.impl.go +++ b/src/modules/network_element/service/ne_info.impl.go @@ -13,6 +13,7 @@ import ( "be.ems/src/framework/redis" "be.ems/src/framework/utils/parse" "be.ems/src/framework/utils/ssh" + "be.ems/src/framework/utils/telnet" "be.ems/src/modules/network_element/model" "be.ems/src/modules/network_element/repository" ) @@ -298,7 +299,7 @@ func (r *NeInfoImpl) CheckUniqueNeTypeAndNeId(neType, neId, id string) bool { return uniqueId == "" } -// NeRunSSHClient 网元主机的SSH客户端-为创建相关连接 +// NeRunSSHClient 网元主机的SSH客户端-为创建相关连接,注意结束后 Close() func (r *NeInfoImpl) NeRunSSHClient(neType, neId string) (*ssh.ConnSSH, error) { neInfo := r.SelectNeInfoByNeTypeAndNeID(neType, neId) if neInfo.NeId != neId { @@ -315,7 +316,7 @@ func (r *NeInfoImpl) NeRunSSHClient(neType, neId string) (*ssh.ConnSSH, error) { logger.Errorf("NeRunSSHClient Hosts %s not found", neInfo.HostIDs) return nil, fmt.Errorf("neinfo host not found") } - neHost := neInfo.Hosts[0] + neHost := neInfo.Hosts[0] // 网元主机ssh 0:22 if neHost.HostType != "ssh" { logger.Errorf("NeRunSSHClient Hosts first HostType %s not ssh", neHost.HostType) return nil, fmt.Errorf("neinfo host type not ssh") @@ -354,6 +355,37 @@ func (r *NeInfoImpl) NeRunSSHCmd(neType, neId, cmd string) (string, error) { return output, nil } +// NeRunTelnetClient 网元主机的Telnet客户端-为创建相关连接,注意结束后 Close() +// num 是网元主机telnet 1:4100 2:5200 +func (r *NeInfoImpl) NeRunTelnetClient(neType, neId string, num int) (*telnet.ConnTelnet, error) { + neInfo := r.SelectNeInfoByNeTypeAndNeID(neType, neId) + if neInfo.NeId != neId { + logger.Errorf("NeRunTelnetClient NeType:%s NeID:%s not found", neType, neId) + return nil, fmt.Errorf("neinfo not found") + } + // 取主机信息 + if neInfo.HostIDs == "" { + logger.Errorf("NeRunTelnetClient NeType:%s NeID:%s hostId not found", neType, neId) + return nil, fmt.Errorf("neinfo hostId not found") + } + neInfo.Hosts = NewNeHostImpl.neHostRepository.SelectByIds(strings.Split(neInfo.HostIDs, ",")) + if len(neInfo.Hosts) <= 0 { + logger.Errorf("NeRunTelnetClient Hosts %s not found", neInfo.HostIDs) + return nil, fmt.Errorf("neinfo host not found") + } + neHost := neInfo.Hosts[num] + + // 创建链接Telnet客户端 + var connTelnet telnet.ConnTelnet + neHost.CopyTo(&connTelnet) + telnetClient, err := connTelnet.NewClient() + if err != nil { + logger.Errorf("NeRunTelnetClient NewClient err => %s", err.Error()) + return nil, fmt.Errorf("neinfo telnet client new err") + } + return telnetClient, nil +} + // neConfOAMData 网元OAM配置文件默认格式数据 func (r *NeInfoImpl) neConfOAMData() map[string]any { return map[string]any{