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

Fix appliance properties lost when you create two node from template

This commit is contained in:
Julien Duponchelle 2017-06-28 09:37:19 +02:00
parent 617868402f
commit 0a6dc55645
No known key found for this signature in database
GPG Key ID: CE8B29639E07F5E8
4 changed files with 22 additions and 5 deletions

View File

@ -15,6 +15,7 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import copy
import uuid import uuid
@ -54,7 +55,7 @@ class Appliance:
@property @property
def data(self): def data(self):
return self._data return copy.deepcopy(self._data)
@property @property
def name(self): def name(self):

View File

@ -15,6 +15,7 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import copy
import uuid import uuid
@ -43,4 +44,4 @@ class ApplianceTemplate:
""" """
Appliance data (a hash) Appliance data (a hash)
""" """
return self._data return copy.deepcopy(self._data)

View File

@ -325,11 +325,12 @@ class Project:
Create a node from an appliance Create a node from an appliance
""" """
try: try:
template = copy.copy(self.controller.appliances[appliance_id].data) template = self.controller.appliances[appliance_id].data
except KeyError: except KeyError:
msg = "Appliance {} doesn't exist".format(appliance_id) msg = "Appliance {} doesn't exist".format(appliance_id)
log.error(msg) log.error(msg)
raise aiohttp.web.HTTPNotFound(text=msg) raise aiohttp.web.HTTPNotFound(text=msg)
print(template)
template["x"] = x template["x"] = x
template["y"] = y template["y"] = y
node_type = template.pop("node_type") node_type = template.pop("node_type")

View File

@ -193,7 +193,10 @@ def test_add_node_from_appliance(async_run, controller):
"server": "local", "server": "local",
"name": "Test", "name": "Test",
"default_name_format": "{name}-{0}", "default_name_format": "{name}-{0}",
"node_type": "vpcs" "node_type": "vpcs",
"properties": {
"a": 1
}
}) })
controller._computes["local"] = compute controller._computes["local"] = compute
@ -211,11 +214,22 @@ def test_add_node_from_appliance(async_run, controller):
}) })
compute.post.assert_any_call('/projects/{}/vpcs/nodes'.format(project.id), compute.post.assert_any_call('/projects/{}/vpcs/nodes'.format(project.id),
data={'node_id': node.id, data={'node_id': node.id,
'name': 'Test-1'}, 'name': 'Test-1',
'a': 1,
},
timeout=120) timeout=120)
assert compute in project._project_created_on_compute assert compute in project._project_created_on_compute
controller.notification.emit.assert_any_call("node.created", node.__json__()) controller.notification.emit.assert_any_call("node.created", node.__json__())
# Make sure we can call twice the node creation
node = async_run(project.add_node_from_appliance("fakeid", x=13, y=12))
compute.post.assert_any_call('/projects/{}/vpcs/nodes'.format(project.id),
data={'node_id': node.id,
'name': 'Test-2',
'a': 1
},
timeout=120)
def test_create_iou_on_multiple_node(async_run, controller): def test_create_iou_on_multiple_node(async_run, controller):
""" """