Merge branch 'dev-sonata-dummy-gatekeeper'
[osm/vim-emu.git] / src / emuvim / examples / resource_model_demo_topology.py
1 """
2 A simple topology to test resource model support.
3 """
4
5 import logging
6 import time
7 from mininet.log import setLogLevel
8 from mininet.node import Controller
9 from emuvim.dcemulator.net import DCNetwork
10 from emuvim.api.zerorpc.compute import ZeroRpcApiEndpoint
11 from emuvim.api.sonata import SonataDummyGatekeeperEndpoint
12 from emuvim.dcemulator.resourcemodel.upb.simple import UpbSimpleCloudDcRM
13
14 logging.basicConfig(level=logging.INFO)
15
16
17 def create_topology1():
18 # create topology
19 # use a maximum of 50% cpu time for containers added to data centers
20 net = DCNetwork(dc_emulation_max_cpu=0.5, controller=Controller)
21 # add some data centers and create a topology
22 dc1 = net.addDatacenter("dc1")
23 dc2 = net.addDatacenter("dc2")
24 s1 = net.addSwitch("s1")
25 net.addLink(dc1, s1, delay="10ms")
26 net.addLink(dc2, s1, delay="20ms")
27
28 # create and assign resource models for each DC
29 rm1 = UpbSimpleCloudDcRM(max_cu=10, max_mu=1024)
30 rm2 = UpbSimpleCloudDcRM(max_cu=20)
31 dc1.assignResourceModel(rm1)
32 dc2.assignResourceModel(rm2)
33
34 # add the command line interface endpoint to each DC
35 zapi1 = ZeroRpcApiEndpoint("0.0.0.0", 4242)
36 zapi1.connectDatacenter(dc1)
37 zapi1.connectDatacenter(dc2)
38 # run API endpoint server (in another thread, don't block)
39 zapi1.start()
40
41 # add the SONATA dummy gatekeeper to each DC
42 sdkg1 = SonataDummyGatekeeperEndpoint("0.0.0.0", 8000)
43 sdkg1.connectDatacenter(dc1)
44 sdkg1.connectDatacenter(dc2)
45 # run the dummy gatekeeper (in another thread, don't block)
46 sdkg1.start()
47
48 # start the emulation platform
49 net.start()
50 print "Wait a moment and allocate some compute start some compute resources..."
51 time.sleep(2)
52 dc1.startCompute("vnf1")
53 dc1.startCompute("vnf2", flavor_name="tiny")
54 dc1.startCompute("vnf3", flavor_name="small")
55 dc2.startCompute("vnf4", flavor_name="medium")
56 print "... done."
57 time.sleep(2)
58 net.CLI()
59 net.stop()
60
61
62 def main():
63 setLogLevel('info') # set Mininet loglevel
64 create_topology1()
65
66
67 if __name__ == '__main__':
68 main()