Re-wrote resource model API and UPB simple resource model. Due to an update of Docker...
[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 import os
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
14
15 logging.basicConfig(level=logging.INFO)
16
17
18 RESOURCE_LOG_PATH = "resource.log"
19
20
21 def create_topology1():
22 cleanup()
23 # create topology
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")
32
33 # create and assign resource models for each DC
34 rm1 = UpbSimpleCloudDcRM(max_cu=4, max_mu=1024)
35 rm2 = UpbSimpleCloudDcRM(max_cu=6)
36 dc1.assignResourceModel(rm1)
37 dc2.assignResourceModel(rm2)
38
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)
44 zapi1.start()
45
46 # start the emulation platform
47 net.start()
48 print "Wait a moment and allocate some compute start some compute resources..."
49 time.sleep(2)
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 print "... done."
55 time.sleep(5)
56 print "Removing instances ..."
57 dc1.stopCompute("vnf1")
58 dc2.stopCompute("vnf4")
59 print "... done"
60 net.CLI()
61 net.stop()
62
63
64 def cleanup():
65 try:
66 os.remove(RESOURCE_LOG_PATH)
67 except OSError:
68 pass
69
70
71 def main():
72 setLogLevel('info') # set Mininet loglevel
73 create_topology1()
74
75
76 if __name__ == '__main__':
77 main()