From 2d6d153262ccb5d0cbaedfa88980c4566a5e4785 Mon Sep 17 00:00:00 2001
From: grossmj <grossmj@gns3.net>
Date: Sat, 21 Mar 2015 14:52:17 -0600
Subject: [PATCH] Save configs when project is committed.

---
 gns3server/modules/base_manager.py      | 10 ++++++++++
 gns3server/modules/dynamips/__init__.py | 13 +++++++++++++
 gns3server/modules/project.py           |  2 ++
 3 files changed, 25 insertions(+)

diff --git a/gns3server/modules/base_manager.py b/gns3server/modules/base_manager.py
index 23a4e34d..c41463a7 100644
--- a/gns3server/modules/base_manager.py
+++ b/gns3server/modules/base_manager.py
@@ -282,6 +282,16 @@ class BaseManager:
 
         pass
 
+    @asyncio.coroutine
+    def project_committed(self, project):
+        """
+        Called when a project is committed.
+
+        :param project: Project instance
+        """
+
+        pass
+
     @asyncio.coroutine
     def delete_vm(self, vm_id):
         """
diff --git a/gns3server/modules/dynamips/__init__.py b/gns3server/modules/dynamips/__init__.py
index 6a5f4c70..b8053c3e 100644
--- a/gns3server/modules/dynamips/__init__.py
+++ b/gns3server/modules/dynamips/__init__.py
@@ -199,6 +199,19 @@ class Dynamips(BaseManager):
             if device.project.id == project.id:
                 yield from device.hypervisor.set_working_dir(project.module_working_directory(self.module_name.lower()))
 
+    @asyncio.coroutine
+    def project_committed(self, project):
+        """
+        Called when a project has been committed.
+
+        :param project: Project instance
+        """
+
+        # save the configs when the project is committed
+        for vm in self._vms.values():
+            if vm.project.id == project.id:
+                yield from vm.save_configs()
+
     @property
     def dynamips_path(self):
         """
diff --git a/gns3server/modules/project.py b/gns3server/modules/project.py
index 8d1d449d..4fc14b9b 100644
--- a/gns3server/modules/project.py
+++ b/gns3server/modules/project.py
@@ -324,6 +324,8 @@ class Project:
             vm = self._vms_to_destroy.pop()
             yield from vm.delete()
             self.remove_vm(vm)
+        for module in self.modules():
+            yield from module.instance().project_committed(self)
 
     @asyncio.coroutine
     def delete(self):