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

被折叠的 条评论
为什么被折叠?



