在前东家的时候,A 机房出口偶发会挂掉,需要切换到备机房B-IDC 出口。全自动化脚本是不可能的,只能半自动化脚本进行切换。基本上就是在核心上把A机房的路由干掉,转化指向B机房。如果A机房出口恢复再反向切换回来。A机房使用的是华为核心交换、B机房使用的是思科的核心交换,比较有代表性。脚本做过实际测试,并且在大促的时候成功的切换过流量,减少了损失。个人感觉还是非常有价值的一件事情 。现在把脚本分享出来仅供语法格式参考,所有ip已做更改。
#! /usr/bin/env pythonimport pexpectimport syschild = pexpect.spawn(\'telnet 10.1.1.250\')fout = file(\'huawei.txt\',\'w\')child.logfile = foutchild.expect(\"Username:\")child.sendline(\'admin\')child.expect(\'Password:\')child.sendline(\'输入密码\')child.expect(\'>\')# for testchild.sendline(\'sys\')child.expect(\']\')child.sendline(\'\')#child.sendline(\'sys\')child.expect(\']\')child.sendline(\'undo ip route-static 0.0.0.0 0.0.0.0 10.11.12.254\')child.expect(\']\')child.sendline(\'ip route-static 0.0.0.0 0.0.0.0 172.32.4.2\')child.expect(\']\')child.sendline(\'ip route-static 0.0.0.0 0.0.0.0 172.32.5.2\')child.expect(\']\')child.sendline(\'quit\')print \"YJ-IDC changed finished\"child = pexpect.spawn(\'telnet 10.12.2.1\')fout = file(\'cisco.txt\',\'w\')child.logfile = foutchild.expect(\"Username:\")child.sendline(\'admin\')child.expect(\'Password:\')child.sendline(\'cisco@123\')child.expect(\'>\')child.sendline(\'en\')child.expect(\'Password:\')child.sendline(\'输入密码\')child.expect(\'#\')child.sendline(\'conf t\')child.expect(\'#\')child.sendline(\'\')child.expect(\'#\')child.sendline(\'\')child.expect(\'#\')child.sendline(\'ip route 172.17.0.0 255.255.0.0 172.32.2.1\')child.expect(\'#\')child.sendline(\'ip route 172.17.0.0 255.255.0.0 172.32.3.1\')child.expect(\'#\')child.sendline(\'ip route 0.0.0.0 0.0.0.0 10.1.1.254\')child.expect(\'#\')child.sendline(\'no ip route 0.0.0.0 0.0.0.0 172.32.2.1\')child.expect(\'#\')child.sendline(\'no ip route 0.0.0.0 0.0.0.0 172.32.3.1\')child.expect(\'#\')child.sendline(\'exit\')child.expect(\'#\')child.sendline(\'exit\')print \"ALL OF changed outside route finished\"