fix int-sdk-son-monitor ci test
[osm/vim-emu.git] / src / emuvim / examples / resource_model_demo_topology.py
old mode 100644 (file)
new mode 100755 (executable)
index ae6ba5e..2dd58ea
@@ -4,30 +4,35 @@ A simple topology to test resource model support.
 
 import logging
 import time
 
 import logging
 import time
+import os
 from mininet.log import setLogLevel
 from mininet.node import Controller
 from emuvim.dcemulator.net import DCNetwork
 from emuvim.api.zerorpc.compute import ZeroRpcApiEndpoint
 from emuvim.api.sonata import SonataDummyGatekeeperEndpoint
 from mininet.log import setLogLevel
 from mininet.node import Controller
 from emuvim.dcemulator.net import DCNetwork
 from emuvim.api.zerorpc.compute import ZeroRpcApiEndpoint
 from emuvim.api.sonata import SonataDummyGatekeeperEndpoint
-from emuvim.dcemulator.resourcemodel.upb.simple import UpbSimpleCloudDcRM
+from emuvim.dcemulator.resourcemodel.upb.simple import UpbSimpleCloudDcRM, UpbOverprovisioningCloudDcRM
 
 logging.basicConfig(level=logging.INFO)
 
 
 
 logging.basicConfig(level=logging.INFO)
 
 
+RESOURCE_LOG_PATH = "resource.log"
+
+
 def create_topology1():
 def create_topology1():
+    cleanup()
     # create topology
     # use a maximum of 50% cpu time for containers added to data centers
     net = DCNetwork(dc_emulation_max_cpu=0.5, controller=Controller)
     # add some data centers and create a topology
     # create topology
     # use a maximum of 50% cpu time for containers added to data centers
     net = DCNetwork(dc_emulation_max_cpu=0.5, controller=Controller)
     # add some data centers and create a topology
-    dc1 = net.addDatacenter("dc1")
-    dc2 = net.addDatacenter("dc2")
+    dc1 = net.addDatacenter("dc1", resource_log_path=RESOURCE_LOG_PATH)
+    dc2 = net.addDatacenter("dc2", resource_log_path=RESOURCE_LOG_PATH)
     s1 = net.addSwitch("s1")
     net.addLink(dc1, s1, delay="10ms")
     net.addLink(dc2, s1, delay="20ms")
 
     # create and assign resource models for each DC
     s1 = net.addSwitch("s1")
     net.addLink(dc1, s1, delay="10ms")
     net.addLink(dc2, s1, delay="20ms")
 
     # create and assign resource models for each DC
-    rm1 = UpbSimpleCloudDcRM(max_cu=10, max_mu=1024)
-    rm2 = UpbSimpleCloudDcRM(max_cu=20)
+    rm1 = UpbSimpleCloudDcRM(max_cu=4, max_mu=1024)
+    rm2 = UpbOverprovisioningCloudDcRM(max_cu=4)
     dc1.assignResourceModel(rm1)
     dc2.assignResourceModel(rm2)
 
     dc1.assignResourceModel(rm1)
     dc2.assignResourceModel(rm2)
 
@@ -38,13 +43,6 @@ def create_topology1():
     # run API endpoint server (in another thread, don't block)
     zapi1.start()
 
     # run API endpoint server (in another thread, don't block)
     zapi1.start()
 
-    # add the SONATA dummy gatekeeper to each DC
-    sdkg1 = SonataDummyGatekeeperEndpoint("0.0.0.0", 8000)
-    sdkg1.connectDatacenter(dc1)
-    sdkg1.connectDatacenter(dc2)
-    # run the dummy gatekeeper (in another thread, don't block)
-    sdkg1.start()
-
     # start the emulation platform
     net.start()
     print "Wait a moment and allocate some compute start some compute resources..."
     # start the emulation platform
     net.start()
     print "Wait a moment and allocate some compute start some compute resources..."
@@ -53,12 +51,25 @@ def create_topology1():
     dc1.startCompute("vnf2", flavor_name="tiny")
     dc1.startCompute("vnf3", flavor_name="small")
     dc2.startCompute("vnf4", flavor_name="medium")
     dc1.startCompute("vnf2", flavor_name="tiny")
     dc1.startCompute("vnf3", flavor_name="small")
     dc2.startCompute("vnf4", flavor_name="medium")
+    dc2.startCompute("vnf5", flavor_name="medium")
+    dc2.startCompute("vnf6", flavor_name="medium")
     print "... done."
     print "... done."
-    time.sleep(2)
+    time.sleep(5)
+    print "Removing instances ..."
+    dc1.stopCompute("vnf1")
+    dc2.stopCompute("vnf4")
+    print "... done"
     net.CLI()
     net.stop()
 
 
     net.CLI()
     net.stop()
 
 
+def cleanup():
+    try:
+        os.remove(RESOURCE_LOG_PATH)
+    except OSError:
+        pass
+
+
 def main():
     setLogLevel('info')  # set Mininet loglevel
     create_topology1()
 def main():
     setLogLevel('info')  # set Mininet loglevel
     create_topology1()