Merge pull request #88 from mpeuster/master
[osm/vim-emu.git] / src / emuvim / dcemulator / node.py
index 1229b8d..3a4fbc2 100755 (executable)
@@ -4,6 +4,7 @@ Distributed Cloud Emulator (dcemulator)
 """
 from mininet.node import Docker
 from mininet.link import Link
+from emuvim.dcemulator.resourcemodel import NotEnoughResourcesAvailable
 import logging
 import time
 import json
@@ -132,7 +133,7 @@ class Datacenter(object):
             raise Exception("Container with name %s already exists." % name)
         # set default parameter
         if image is None:
-            image = "ubuntu"
+            image = "ubuntu:trusty"
         if network is None:
             network = {}  # {"ip": "10.0.0.254/8"}
         if isinstance(network, dict):
@@ -152,8 +153,15 @@ class Datacenter(object):
 
         # apply resource limits to container if a resource model is defined
         if self._resource_model is not None:
-            self._resource_model.allocate(d)
-            self._resource_model.write_allocation_log(d, self.resource_log_path)
+            try:
+                self._resource_model.allocate(d)
+                self._resource_model.write_allocation_log(d, self.resource_log_path)
+            except NotEnoughResourcesAvailable as ex:
+                LOG.warning("Allocation of container %r was blocked by resource model." % name)
+                LOG.info(ex.message)
+                # ensure that we remove the container
+                self.net.removeDocker(name)
+                return None
 
         # connect all given networks
         # if no --net option is given, network = [{}], so 1 empty dict in the list