From 728635a3d3c4a4080ebcbcfbee54c0450b10012d Mon Sep 17 00:00:00 2001 From: Anshul Gangwar Date: Mon, 10 Aug 2015 16:13:42 +0530 Subject: [PATCH] CLOUDSTACK-8721: Fixed Setting details of VM through API results in removal of all other details except the one passed in API --- .../cloudstack/api/command/user/vm/UpdateVMCmd.java | 8 ++++---- server/src/com/cloud/vm/UserVmManagerImpl.java | 10 ++++++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java index 6954832a9f6..458122d6d7b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java @@ -94,7 +94,7 @@ public class UpdateVMCmd extends BaseCustomIdCmd { private String instanceName; @Parameter(name = ApiConstants.DETAILS, type = CommandType.MAP, description = "Details in key/value pairs.") - protected Map details; + protected Map details; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// @@ -136,13 +136,13 @@ public class UpdateVMCmd extends BaseCustomIdCmd { return instanceName; } - public Map getDetails() { + public Map getDetails() { if (this.details == null || this.details.isEmpty()) { return null; } - Collection paramsCollection = this.details.values(); - return (Map) (paramsCollection.toArray())[0]; + Collection paramsCollection = this.details.values(); + return (Map) (paramsCollection.toArray())[0]; } ///////////////////////////////////////////////////// diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index a3f4b82c77d..248c6f2e3a9 100644 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2147,7 +2147,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir String userData = cmd.getUserData(); Boolean isDynamicallyScalable = cmd.isDynamicallyScalable(); String hostName = cmd.getHostName(); - Map details = cmd.getDetails(); + Map details = cmd.getDetails(); Account caller = CallContext.current().getCallingAccount(); // Input validation and permission checks @@ -2188,7 +2188,13 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir } if (details != null && !details.isEmpty()) { - vmInstance.setDetails(details); + _vmDao.loadDetails(vmInstance); + + for(Map.Entry entry : details.entrySet()) { + if(entry instanceof Map.Entry) { + vmInstance.setDetail(entry.getKey(), entry.getValue()); + } + } _vmDao.saveDetails(vmInstance); }