CLOUDSTACK-8721: Fixed Setting details of VM through API results in removal of all other details except the one passed in API

This commit is contained in:
Anshul Gangwar 2015-08-10 16:13:42 +05:30
parent cd02a59841
commit 728635a3d3
2 changed files with 12 additions and 6 deletions

View File

@ -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<String, String> details;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
@ -136,13 +136,13 @@ public class UpdateVMCmd extends BaseCustomIdCmd {
return instanceName;
}
public Map getDetails() {
public Map<String, String> getDetails() {
if (this.details == null || this.details.isEmpty()) {
return null;
}
Collection paramsCollection = this.details.values();
return (Map) (paramsCollection.toArray())[0];
Collection<String> paramsCollection = this.details.values();
return (Map<String, String>) (paramsCollection.toArray())[0];
}
/////////////////////////////////////////////////////

View File

@ -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<String,String> 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<String,String> entry : details.entrySet()) {
if(entry instanceof Map.Entry) {
vmInstance.setDetail(entry.getKey(), entry.getValue());
}
}
_vmDao.saveDetails(vmInstance);
}