mirror of
https://github.com/GNS3/gns3-server
synced 2024-11-24 17:28:08 +00:00
Support auto stop for the GNS3 VM
Ref https://github.com/GNS3/gns3-gui/issues/1254
This commit is contained in:
parent
fc8b4c3216
commit
9255dc07b7
@ -74,19 +74,21 @@ class Controller:
|
|||||||
if self.gns3vm.enable:
|
if self.gns3vm.enable:
|
||||||
yield from self.gns3vm.start()
|
yield from self.gns3vm.start()
|
||||||
self._computes["vm"] = Compute(compute_id="vm",
|
self._computes["vm"] = Compute(compute_id="vm",
|
||||||
name="GNS3 VM",
|
name="GNS3 VM",
|
||||||
controller=self,
|
controller=self,
|
||||||
protocol=self.gns3vm.protocol,
|
protocol=self.gns3vm.protocol,
|
||||||
host=self.gns3vm.ip_address,
|
host=self.gns3vm.ip_address,
|
||||||
port=self.gns3vm.port,
|
port=self.gns3vm.port,
|
||||||
user=self.gns3vm.user,
|
user=self.gns3vm.user,
|
||||||
password=self.gns3vm.password)
|
password=self.gns3vm.password)
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def stop(self):
|
def stop(self):
|
||||||
log.info("Stop controller")
|
log.info("Stop controller")
|
||||||
for compute in self._computes.values():
|
for compute in self._computes.values():
|
||||||
yield from compute.close()
|
yield from compute.close()
|
||||||
|
if self.gns3vm.enable and self.gns3vm.auto_stop:
|
||||||
|
yield from self.gns3vm.stop()
|
||||||
self._computes = {}
|
self._computes = {}
|
||||||
self._projects = {}
|
self._projects = {}
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ class GNS3VM:
|
|||||||
self._engines = {}
|
self._engines = {}
|
||||||
self._settings = {
|
self._settings = {
|
||||||
"vmname": None,
|
"vmname": None,
|
||||||
"auto_stop": False,
|
"auto_stop": True,
|
||||||
"headless": False,
|
"headless": False,
|
||||||
"enable": False,
|
"enable": False,
|
||||||
"engine": "vmware"
|
"engine": "vmware"
|
||||||
@ -120,6 +120,13 @@ class GNS3VM:
|
|||||||
"""
|
"""
|
||||||
return self._settings["enable"]
|
return self._settings["enable"]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def auto_stop(self):
|
||||||
|
"""
|
||||||
|
The GNSVM should auto stop
|
||||||
|
"""
|
||||||
|
return self._settings["auto_stop"]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def settings(self):
|
def settings(self):
|
||||||
return self._settings
|
return self._settings
|
||||||
@ -169,3 +176,12 @@ class GNS3VM:
|
|||||||
engine.vmname = self._settings["vmname"]
|
engine.vmname = self._settings["vmname"]
|
||||||
yield from engine.start()
|
yield from engine.start()
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def stop(self):
|
||||||
|
"""
|
||||||
|
Stop the GNS3 VM
|
||||||
|
"""
|
||||||
|
engine = self._current_engine()
|
||||||
|
if not engine.running:
|
||||||
|
log.info("Stop the GNS3 VM")
|
||||||
|
yield from engine.stop()
|
||||||
|
@ -255,7 +255,7 @@ def test_getProject(controller, async_run):
|
|||||||
|
|
||||||
def test_start(controller, async_run):
|
def test_start(controller, async_run):
|
||||||
async_run(controller.start())
|
async_run(controller.start())
|
||||||
assert len(controller.computes) == 1 # Local compute is created
|
assert len(controller.computes) == 1 # Local compute is created
|
||||||
assert controller.computes["local"].name == socket.gethostname()
|
assert controller.computes["local"].name == socket.gethostname()
|
||||||
|
|
||||||
|
|
||||||
@ -270,7 +270,7 @@ def test_start_vm(controller, async_run):
|
|||||||
with asyncio_patch("gns3server.controller.gns3vm.vmware_gns3_vm.VMwareGNS3VM.start") as mock:
|
with asyncio_patch("gns3server.controller.gns3vm.vmware_gns3_vm.VMwareGNS3VM.start") as mock:
|
||||||
async_run(controller.start())
|
async_run(controller.start())
|
||||||
assert mock.called
|
assert mock.called
|
||||||
assert len(controller.computes) == 2 # Local compute and vm are created
|
assert len(controller.computes) == 2 # Local compute and vm are created
|
||||||
assert "local" in controller.computes
|
assert "local" in controller.computes
|
||||||
assert "vm" in controller.computes
|
assert "vm" in controller.computes
|
||||||
|
|
||||||
@ -282,6 +282,21 @@ def test_stop(controller, async_run):
|
|||||||
assert c.connected is False
|
assert c.connected is False
|
||||||
|
|
||||||
|
|
||||||
|
def test_stop_vm(controller, async_run):
|
||||||
|
"""
|
||||||
|
Start the controller with a GNS3 VM running
|
||||||
|
"""
|
||||||
|
controller.gns3vm.settings = {
|
||||||
|
"enable": True,
|
||||||
|
"engine": "vmware",
|
||||||
|
"auto_stop": True
|
||||||
|
}
|
||||||
|
controller.gns3vm.running = True
|
||||||
|
with asyncio_patch("gns3server.controller.gns3vm.vmware_gns3_vm.VMwareGNS3VM.stop") as mock:
|
||||||
|
async_run(controller.stop())
|
||||||
|
assert mock.called
|
||||||
|
|
||||||
|
|
||||||
def test_load_project(controller, async_run, tmpdir):
|
def test_load_project(controller, async_run, tmpdir):
|
||||||
data = {
|
data = {
|
||||||
"name": "Experience",
|
"name": "Experience",
|
||||||
|
Loading…
Reference in New Issue
Block a user