Improve server/modules termination and how to wait for an hypervisor.

connection.
System to avoid duplicated name for nodes.
Reload and idle-pc support for Dynamips routers.
Hypervisor allocation for other Dynamips devices.
This commit is contained in:
grossmj committed 2014-02-20 17:39:03 -07:00
1 parent df798f4bea
commit 72d303069c
16 files changed
+257 -56

No files matched your search

@@ -39,7 +39,7 @@ class ATMSW(object):
name = request["name"]
try:
hypervisor = self._hypervisor_manager.allocate_hypervisor_for_switch()
hypervisor = self._hypervisor_manager.allocate_hypervisor_for_simulated_device()
atmsw = ATMSwitch(hypervisor, name)
except DynamipsError as e:
self.send_custom_error(str(e))
@@ -65,6 +65,7 @@ class ATMSW(object):
atmsw = self._atm_switches[atmsw_id]
try:
atmsw.delete()
self._hypervisor_manager.unallocate_hypervisor_for_simulated_device(atmsw)
except DynamipsError as e:
self.send_custom_error(str(e))
return
@@ -105,6 +106,7 @@ class ATMSW(object):
self.send_custom_error(str(e))
return
response["port_name"] = request["port_name"]
self.send_response(response)
@IModule.route("dynamips.atmsw.add_nio")
@@ -121,7 +123,7 @@ class ATMSW(object):
atmsw = self._atm_switches[atmsw_id]
port = request["port"]
mapping = request["mapping"]
mappings = request["mappings"]
try:
nio = self.create_nio(atmsw, request)
@@ -132,7 +134,7 @@ class ATMSW(object):
try:
atmsw.add_nio(nio, port)
pvc_entry = re.compile(r"""^([0-9]*):([0-9]*):([0-9]*)$""")
for source, destination in mapping.items():
for source, destination in mappings.items():
match_source_pvc = pvc_entry.search(source)
match_destination_pvc = pvc_entry.search(destination)
if match_source_pvc and match_destination_pvc:
@@ -38,7 +38,7 @@ class ETHHUB(object):
name = request["name"]
try:
hypervisor = self._hypervisor_manager.allocate_hypervisor_for_switch()
hypervisor = self._hypervisor_manager.allocate_hypervisor_for_simulated_device()
ethhub = Hub(hypervisor, name)
except DynamipsError as e:
self.send_custom_error(str(e))
@@ -64,6 +64,7 @@ class ETHHUB(object):
ethhub = self._ethernet_hubs[ethhub_id]
try:
ethhub.delete()
self._hypervisor_manager.unallocate_hypervisor_for_simulated_device(ethhub)
except DynamipsError as e:
self.send_custom_error(str(e))
return
@@ -106,6 +107,7 @@ class ETHHUB(object):
self.send_custom_error(str(e))
return
response["port_name"] = request["port_name"]
self.send_response(response)
@IModule.route("dynamips.ethhub.add_nio")
@@ -38,7 +38,7 @@ class ETHSW(object):
name = request["name"]
try:
hypervisor = self._hypervisor_manager.allocate_hypervisor_for_switch()
hypervisor = self._hypervisor_manager.allocate_hypervisor_for_simulated_device()
ethsw = EthernetSwitch(hypervisor, name)
except DynamipsError as e:
self.send_custom_error(str(e))
@@ -64,6 +64,7 @@ class ETHSW(object):
ethsw = self._ethernet_switches[ethsw_id]
try:
ethsw.delete()
self._hypervisor_manager.unallocate_hypervisor_for_simulated_device(ethsw)
except DynamipsError as e:
self.send_custom_error(str(e))
return
@@ -116,6 +117,7 @@ class ETHSW(object):
self.send_custom_error(str(e))
return
response["port_name"] = request["port_name"]
self.send_response(response)
@IModule.route("dynamips.ethsw.add_nio")
+5 -3
View File
@@ -38,7 +38,7 @@ class FRSW(object):
name = request["name"]
try:
hypervisor = self._hypervisor_manager.allocate_hypervisor_for_switch()
hypervisor = self._hypervisor_manager.allocate_hypervisor_for_simulated_device()
frsw = FrameRelaySwitch(hypervisor, name)
except DynamipsError as e:
self.send_custom_error(str(e))
@@ -64,6 +64,7 @@ class FRSW(object):
frsw = self._frame_relay_switches[frsw_id]
try:
frsw.delete()
self._hypervisor_manager.unallocate_hypervisor_for_simulated_device(frsw)
except DynamipsError as e:
self.send_custom_error(str(e))
return
@@ -104,6 +105,7 @@ class FRSW(object):
self.send_custom_error(str(e))
return
response["port_name"] = request["port_name"]
self.send_response(response)
@IModule.route("dynamips.frsw.add_nio")
@@ -120,7 +122,7 @@ class FRSW(object):
frsw = self._frame_relay_switches[frsw_id]
port = request["port"]
mapping = request["mapping"]
mappings = request["mappings"]
try:
nio = self.create_nio(frsw, request)
@@ -132,7 +134,7 @@ class FRSW(object):
frsw.add_nio(nio, port)
# add the VCs mapped with this port/nio
for source, destination in mapping.items():
for source, destination in mappings.items():
source_port, source_dlci = map(int, source.split(':'))
destination_port, destination_dlci = map(int, destination.split(':'))
if frsw.has_port(destination_port):
+62 -4
View File
@@ -99,18 +99,27 @@ class VM(object):
log.debug("received request {}".format(request))
#TODO: JSON schema validation
#name = request["name"]
name = None
if "name" in request:
name = request["name"]
platform = request["platform"]
image = request["image"]
ram = request["ram"]
try:
hypervisor = self._hypervisor_manager.allocate_hypervisor_for_router(image, ram)
router = PLATFORMS[platform](hypervisor)
router = PLATFORMS[platform](hypervisor, name)
router.ram = ram
router.image = image
router.sparsemem = self._hypervisor_manager.sparse_memory_support
router.mmap = self._hypervisor_manager.mmap_support
if "console" in request:
router.console = request["console"]
if "aux" in request:
router.aux = request["aux"]
if "mac_addr" in request:
router.mac_addr = request["mac_addr"]
# JIT sharing support
if self._hypervisor_manager.jit_sharing_support:
@@ -161,6 +170,7 @@ class VM(object):
router = self._routers[router_id]
try:
router.delete()
self._hypervisor_manager.unallocate_hypervisor_for_router(router)
except DynamipsError as e:
self.send_custom_error(str(e))
return
@@ -223,6 +233,27 @@ class VM(object):
return
self.send_response(request)
@IModule.route("dynamips.vm.reload")
def vm_reload(self, request):
"""
Reloads a VM (router)
:param request: JSON request
"""
#TODO: JSON schema validation for the request
log.debug("received request {}".format(request))
router_id = request["id"]
router = self._routers[router_id]
try:
if router.get_status() != "inactive":
router.stop()
router.start()
except DynamipsError as e:
self.send_custom_error(str(e))
return
self.send_response(request)
@IModule.route("dynamips.vm.update")
def vm_update(self, request):
"""
@@ -286,6 +317,34 @@ class VM(object):
# for now send back the original request
self.send_response(request)
@IModule.route("dynamips.vm.idlepcs")
def vm_idlepcs(self, request):
"""
Get idle-pc proposals.
:param request: JSON request
"""
#TODO: JSON schema validation for the request
log.debug("received request {}".format(request))
router_id = request["id"]
router = self._routers[router_id]
try:
if "compute" in request and request["compute"] == False:
idlepcs = router.show_idle_pc_prop()
else:
# reset the current idlepc value
router.idlepc = "0x0"
idlepcs = router.get_idle_pc_prop()
except DynamipsError as e:
self.send_custom_error(str(e))
return
response = {"id": router_id,
"idlepcs": idlepcs}
self.send_response(response)
@IModule.route("dynamips.vm.allocate_udp_port")
def vm_allocate_udp_port(self, request):
"""
@@ -306,6 +365,7 @@ class VM(object):
self.send_custom_error(str(e))
return
response["port_name"] = request["port_name"]
self.send_response(response)
@IModule.route("dynamips.vm.add_nio")
@@ -324,8 +384,6 @@ class VM(object):
slot = request["slot"]
port = request["port"]
print(request)
try:
nio = self.create_nio(router, request)
except DynamipsError as e: