2 A simple topology to test resource model support.
8 from mininet
.log
import setLogLevel
9 from mininet
.node
import Controller
10 from emuvim
.dcemulator
.net
import DCNetwork
11 from emuvim
.api
.zerorpc
.compute
import ZeroRpcApiEndpoint
12 from emuvim
.api
.sonata
import SonataDummyGatekeeperEndpoint
13 from emuvim
.dcemulator
.resourcemodel
.upb
.simple
import UpbSimpleCloudDcRM
, UpbOverprovisioningCloudDcRM
15 logging
.basicConfig(level
=logging
.INFO
)
18 RESOURCE_LOG_PATH
= "resource.log"
21 def create_topology1():
24 # use a maximum of 50% cpu time for containers added to data centers
25 net
= DCNetwork(dc_emulation_max_cpu
=0.5, controller
=Controller
)
26 # add some data centers and create a topology
27 dc1
= net
.addDatacenter("dc1", resource_log_path
=RESOURCE_LOG_PATH
)
28 dc2
= net
.addDatacenter("dc2", resource_log_path
=RESOURCE_LOG_PATH
)
29 s1
= net
.addSwitch("s1")
30 net
.addLink(dc1
, s1
, delay
="10ms")
31 net
.addLink(dc2
, s1
, delay
="20ms")
33 # create and assign resource models for each DC
34 rm1
= UpbSimpleCloudDcRM(max_cu
=4, max_mu
=1024)
35 rm2
= UpbOverprovisioningCloudDcRM(max_cu
=4)
36 dc1
.assignResourceModel(rm1
)
37 dc2
.assignResourceModel(rm2
)
39 # add the command line interface endpoint to each DC
40 zapi1
= ZeroRpcApiEndpoint("0.0.0.0", 4242)
41 zapi1
.connectDatacenter(dc1
)
42 zapi1
.connectDatacenter(dc2
)
43 # run API endpoint server (in another thread, don't block)
46 # start the emulation platform
48 print "Wait a moment and allocate some compute start some compute resources..."
50 dc1
.startCompute("vnf1")
51 dc1
.startCompute("vnf2", flavor_name
="tiny")
52 dc1
.startCompute("vnf3", flavor_name
="small")
53 dc2
.startCompute("vnf4", flavor_name
="medium")
54 dc2
.startCompute("vnf5", flavor_name
="medium")
55 dc2
.startCompute("vnf6", flavor_name
="medium")
58 print "Removing instances ..."
59 dc1
.stopCompute("vnf1")
60 dc2
.stopCompute("vnf4")
68 os
.remove(RESOURCE_LOG_PATH
)
74 setLogLevel('info') # set Mininet loglevel
78 if __name__
== '__main__':