远程登录上交换机后,已有镜像配置信息获取及新增配置

本文介绍了在远程登录交换机后,如何获取并处理已有镜像配置信息。通过读取并处理`show running-config | include monitor`的输出,进行数据整理,包括:添加行号、提取关键信息(组号、端口、接收/发送状态),并利用字典数据结构关联这些信息。此外,还讨论了在获取配置信息后,如何新增或清除配置信息的步骤。

1、已有配置信息数据处理   (************星级********):

首先获取已有的镜像配置信息:show running-config | include  monitor

得到这些信息的时候,需要对这些关键信息进行处理、归纳。

frist:得先判断哪几条信息是同一组的(也就是哪几条是配对关系的);

second:在同一组中需要知道哪些端口是源端口、哪些是目的端口;

next:源端口是接收/发送/both(接收和发送)?

final:将这些数据信息之间的关系通过一定的方式联系起来。

通过分析发现:这些信息中没有唯一的标识去判断是否为一组 ,想办法把同为一组的捆绑起来。

a、将这三行信息写入文件info.txt中,并且为其添加行号:

def addFileLineNum(filename=‘info.txt’):
        with codecs.open(filename,encoding='utf-8') as file:
            lines=file.readlines()
            file.close()
        row_count=1
        with codecs.open(filename,'w',encoding='utf-8') as file:
            for line in lines:
                file.write("%-5d"%row_count+line)
                row_count+=1
            file.close()

b、先取出组号、及行号     

awk   '{print $4,$1}'  ./info.txt

然后将每一行作为一个列表存储,最终数据形式:list_l = [['1', '1'], ['1', '2'], ['1', '3']]

最后:关键之处在于,要将上行这个列表转换为键值相同的字典。用到defaultdict这个神器。

totallist_s = defaultdict(list)

for type,id in totallist:

        totallist_s[type].append(id)

字典形式如:defaultdict(<type 'list'>, {'1': ['1', '2', '3']})       

{'1': ['1', '2', '3']}这个字典就很棒了,很显然的可以知道第一组是由行号为1、2、3的数据信息组成。

c、现在获取行号与端口之间的数据关系

awk   '{print $1,$7}'  ./info.txt

然后将每一行作为一个列表存储,最终数据形式:list_2 = [['1','Ethernet1/1;2;3;4'], ['2','Ethernet1/1;2;3;4'], ['3','Ethernet1/23']]

将上行列表转换为字典:totallist1_dict=dict(list_2 )

字典数据如下:{'1':'Ethernet1/1;2;3;4', '2':'Ethernet1/1;2;3;4', '3':'Ethernet1/23'}

d、获取行号与是否接收、发送信息配置信息:

awk   '{print $1,$8}'  ./info.txt

然后将每一行作为一个列表存储,最终数据形式:list_3 = [['1', 'rx'], ['2', 'tx'], ['3', '']]

将上行列表转换为字典:totallist2_dict=dict(list_3 )

字典数据如下:{'1': 'rx', '3': '', '2': 'tx'}

e、通过以上几步的数据处理,现在就可以通过这三个字典将这些数据信息联系起来:

for i in totallist_s:

    item=totallist_s[i]     #item得到的是第几组的 组号    例如本次例子中 item=totallist_s['1']   ===>item=['1', '2', '3']   1 2 3则是行号

    for k in item:   

        if len(totallist2_dict[k]) == 0:  #若在totallist2_dict字典中,某一个键的值长度为0  则说明这一行的 端口为 目的端口

             print totallist1_dict[k]+'  is destination.'

        else:  #若键的值长度不为0,则需要区分是 rx 还是 tx  rx/tx的信息存储在 totallist2_dict中。 totallist1_dict存储行号与端口之间的关系

             print totallist1_dict[k]+'  is '+totallist2_dict[k]

 

2、当获取已有的配置信息后,可能需要 清除已有的配置信息,或者新增 配置信息。

新增:需要根据已有信息去获取 新的组号

            groupnum = []            #存放 totallist_s中的键 key   
            for i in totallist_s.keys():  #defaultdict(<type 'list'>, {'1': ['1', '2', '3']})
                groupnum .append(int(i))

            groupnum .sort(cmp=None, key=None, reverse=False)

            num = groupnum [-1]

            newgroupnum = num + 1    #当获取已有最后一组组号,然后新增组号则加1即可

命令:'monitor session ' + str(newgroupnum ) + ' destination interface ' + 确定的目的端口号

            'monitor session ' + str(newgroupnum ) + ' source interface ' + 确定的源端口号+ '   ' + 确定的类型rx/ts/both

清除命令:'no   ' +  'monitor session ' + str(newgroupnum ) + ' destination interface ' + 确定的目的端口号

                 'no   ' +  'monitor session ' + str(newgroupnum ) + ' source interface ' + 确定的源端口号+ '   ' + 确定的类型rx/ts/both

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值