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