1
0
mirror of https://github.com/GNS3/gns3-server synced 2024-11-24 17:28:08 +00:00

Restart the container if running and you change the hostname

Fix #439
This commit is contained in:
Julien Duponchelle 2016-02-24 15:47:53 +01:00
parent fd18458588
commit 2d42f32d71
No known key found for this signature in database
GPG Key ID: F1E2485547D4595D
2 changed files with 42 additions and 1 deletions

View File

@ -189,11 +189,15 @@ class DockerVM(BaseVM):
""" """
Destroy an recreate the container with the new settings Destroy an recreate the container with the new settings
""" """
# We need to save the console port and restore it # We need to save the console and state and restore it
console = self.console console = self.console
state = yield from self._get_container_state()
yield from self.remove() yield from self.remove()
yield from self.create() yield from self.create()
self.console = console self.console = console
if state == "running":
yield from self.start()
@asyncio.coroutine @asyncio.coroutine
def start(self): def start(self):

View File

@ -392,6 +392,43 @@ def test_update(loop, vm):
assert vm.console == original_console assert vm.console == original_console
def test_update_running(loop, vm):
response = {
"Id": "e90e34656806",
"Warnings": []
}
original_console = vm.console
vm.start = MagicMock()
with asyncio_patch("gns3server.modules.docker.Docker.list_images", return_value=[{"image": "ubuntu"}]) as mock_list_images:
with asyncio_patch("gns3server.modules.docker.DockerVM._get_container_state", return_value="running"):
with asyncio_patch("gns3server.modules.docker.Docker.query", return_value=response) as mock_query:
loop.run_until_complete(asyncio.async(vm.update()))
mock_query.assert_any_call("DELETE", "containers/e90e34656842", params={"force": 1})
mock_query.assert_any_call("POST", "containers/create", data={
"Tty": True,
"OpenStdin": True,
"StdinOnce": False,
"HostConfig":
{
"CapAdd": ["ALL"],
"Binds": [],
"Privileged": True
},
"Volumes": {},
"NetworkDisabled": True,
"Name": "test",
"Hostname": "test",
"Image": "ubuntu"
})
assert vm.console == original_console
assert vm.start.called
def test_remove(loop, vm): def test_remove(loop, vm):
with asyncio_patch("gns3server.modules.docker.DockerVM._get_container_state", return_value="stopped"): with asyncio_patch("gns3server.modules.docker.DockerVM._get_container_state", return_value="stopped"):