使用Python腳本創建OVS交換機網路

使用Python腳本創建OVS交換機網路

#coding=utf-8
#!/usr/bin/python
import os
import commands
class ovsnet:  
    def __init__(self):  
        self.num =30 
        self.br = []
        for i in range(0,self.num):
            brs = 'br{}'.format(i)
            self.br.append(brs)
    # 查看並刪除已經創建的網橋
    def delallbr(self):  
        (status, output) = commands.getstatusoutput('ovs-vsctl list-br')
        brall = output.splitlines()
        for i in range(0,len(brall)):
            os.system('ovs-vsctl del-br '+brall[i])
	# 創建網橋,創建交換機端口並設置編號
    def addbr(self):
        for i in range(0,self.num):
            os.system('ovs-vsctl add-br '+self.br[i])
            os.system('ovs-vsctl add-port '+self.br[i]+' '+self.br[i]+'port0'+' -- set Interface '+self.br[i]+'port0'+' ofport_request=1')
            os.system('ovs-vsctl add-port '+self.br[i]+' '+self.br[i]+'port1'+' -- set Interface '+self.br[i]+'port1'+' ofport_request=2')
        #設置交換機的dpid
		for i in range(0,self.num):
            if i+1<16:
               os.system('ovs-vsctl set bridge '+self.br[i]+' other_config:datapath-id=000000000000000'+str(hex(i+1))[2:])
            else:
               os.system('ovs-vsctl set bridge '+self.br[i]+' other_config:datapath-id=00000000000000'+str(hex(i+1))[2:])
    # 添加鏈路
	def addLink(self):
        os.system('ovs-vsctl set interface '+self.br[0]+'port1 type=patch options:peer='+self.br[1]+'port0')
        os.system('ovs-vsctl set interface '+self.br[1]+'port0 type=patch options:peer='+self.br[0]+'port1')
        for i in range(1,self.num-1):
            os.system('ovs-vsctl set interface '+self.br[i]+'port1 type=patch options:peer='+self.br[i+1]+'port0')
            os.system('ovs-vsctl set interface '+self.br[i+1]+'port0 type=patch options:peer='+self.br[i]+'port1')
        os.system('ovs-vsctl set interface '+self.br[self.num-2]+'port1 type=patch options:peer='+self.br[self.num-1]+'port0')
        os.system('ovs-vsctl set interface '+self.br[self.num-1]+'port0 type=patch options:peer='+self.br[self.num-2]+'port1')
    # 使用OVS模擬虛擬主機
	def addHost(self):
        os.system('ovs-vsctl add-port br1 br1-p0')
        os.system('ovs-vsctl add-port br1 br1-p1')
        os.system('ovs-vsctl add-port br2 br2-p0')
        os.system('ovs-vsctl add-port br2 br2-p1')
        os.system('ovs-vsctl add-port br3 br3-p0')
        os.system('ovs-vsctl add-port br3 br3-p1')
        os.system('ovs-vsctl set interface br1-p0 type=internal') 
        os.system('ovs-vsctl set interface br1-p1 type=internal') 
        os.system('ovs-vsctl set interface br2-p0 type=internal') 
        os.system('ovs-vsctl set interface br2-p1 type=internal') 
        os.system('ovs-vsctl set interface br3-p0 type=internal') 
        os.system('ovs-vsctl set interface br3-p1 type=internal') 
		# 需要提前設置網路域:ip netns add ns0
        self.addIP('ns0','br1-p0','192.168.1.1/24')
        self.addIP('ns1','br1-p1','192.168.1.2/24')
        self.addIP('ns2','br2-p0','192.168.1.3/24')
        self.addIP('ns3','br2-p1','192.168.1.4/24')
        self.addIP('ns4','br3-p0','192.168.1.5/24')
        self.addIP('ns5','br3-p1','192.168.1.6/24')
		#設置好虛擬主機後,可以用命令:ip netns exec ns0 ping 192.168.1.2,查看主機的連接
    def addIP(self,ns,port,ip):
        os.system('ip link set '+port+' netns '+ns)
        os.system('ip netns exec '+ns+' ip addr add '+ip+' dev '+port)
        os.system('ip netns exec '+ns+' ifconfig '+port+' promisc up')
    # 將OVS交換機連接到控制器
	def addController(self):
        for i in range(0,self.num):
            os.system('ovs-vsctl set-controller '+self.br[i]+' tcp:10.108.171.181:6633')
if __name__ == '__main__':  
    a = ovsnet() 
    a.delallbr()  
    a.addbr()
    a.addLink()
    a.addHost()
    a.addController()




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章