X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2Fvim-emu.git;a=blobdiff_plain;f=src%2Femuvim%2Fexamples%2Fresource_model_demo_topology.py;h=04725540cb882f9f3597f637068f060b71a323c3;hp=ae6ba5e535ba58197f702a4edbceadc04e38ecd4;hb=2ed4ae40f306361cd3187dcb47b8c1f13e89cf9a;hpb=279565d5f8749ac9ac5927a718b7e8e6e63b8450 diff --git a/src/emuvim/examples/resource_model_demo_topology.py b/src/emuvim/examples/resource_model_demo_topology.py old mode 100644 new mode 100755 index ae6ba5e..0472554 --- a/src/emuvim/examples/resource_model_demo_topology.py +++ b/src/emuvim/examples/resource_model_demo_topology.py @@ -1,33 +1,65 @@ """ +Copyright (c) 2015 SONATA-NFV +ALL RIGHTS RESERVED. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Neither the name of the SONATA-NFV [, ANY ADDITIONAL AFFILIATION] +nor the names of its contributors may be used to endorse or promote +products derived from this software without specific prior written +permission. + +This work has been performed in the framework of the SONATA project, +funded by the European Commission under Grant number 671517 through +the Horizon 2020 and 5G-PPP programmes. The authors would like to +acknowledge the contributions of their colleagues of the SONATA +partner consortium (www.sonata-nfv.eu). +""" +""" A simple topology to test resource model support. """ 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 emuvim.dcemulator.resourcemodel.upb.simple import UpbSimpleCloudDcRM +from emuvim.dcemulator.resourcemodel.upb.simple import UpbSimpleCloudDcRM, UpbOverprovisioningCloudDcRM logging.basicConfig(level=logging.INFO) +RESOURCE_LOG_PATH = "resource.log" + + 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 - 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 - 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) @@ -38,13 +70,6 @@ def create_topology1(): # 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..." @@ -53,12 +78,25 @@ def create_topology1(): 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." - time.sleep(2) + time.sleep(5) + print "Removing instances ..." + dc1.stopCompute("vnf1") + dc2.stopCompute("vnf4") + print "... done" net.CLI() net.stop() +def cleanup(): + try: + os.remove(RESOURCE_LOG_PATH) + except OSError: + pass + + def main(): setLogLevel('info') # set Mininet loglevel create_topology1()