From 5a3f4af638d43763f197d414c27579bb1b3115e0 Mon Sep 17 00:00:00 2001 From: Kris McQueen Date: Tue, 21 Sep 2010 16:28:31 -0700 Subject: [PATCH] AddHost and AddSecondaryStorage have different required parameters, so avoid subclassing these commands and just call a common method in the agent manager. Fix the response name for listAccounts. CreateUser returns one user, so don't always get response.user[0] since that's pointless. A secondary storage host does not have a pod id (NfsSecondaryStorageResource) so make sure not to dereference variables that will be null. --- .../com/cloud/agent/manager/AgentManager.java | 3 +- .../cloud/agent/manager/AgentManagerImpl.java | 23 +++---- .../com/cloud/api/commands/AddHostCmd.java | 63 ++++++++++++++++++- .../api/commands/AddSecondaryStorageCmd.java | 47 +++++++------- .../cloud/api/commands/ListAccountsCmd.java | 2 +- .../com/cloud/api/commands/ListHostsCmd.java | 26 +++++--- ui/test/scripts/cloud.core.test.js | 2 +- 7 files changed, 115 insertions(+), 51 deletions(-) diff --git a/server/src/com/cloud/agent/manager/AgentManager.java b/server/src/com/cloud/agent/manager/AgentManager.java index e44d08d8ae2..cea5117aebb 100755 --- a/server/src/com/cloud/agent/manager/AgentManager.java +++ b/server/src/com/cloud/agent/manager/AgentManager.java @@ -24,7 +24,6 @@ import com.cloud.agent.Listener; import com.cloud.agent.api.Answer; import com.cloud.agent.api.Command; import com.cloud.api.commands.AddHostCmd; -import com.cloud.api.commands.AddHostOrStorageCmd; import com.cloud.api.commands.AddSecondaryStorageCmd; import com.cloud.api.commands.CancelMaintenanceCmd; import com.cloud.api.commands.DeleteHostCmd; @@ -231,7 +230,7 @@ public interface AgentManager extends Manager { public boolean reconnect(final long hostId) throws AgentUnavailableException; public boolean reconnectHost(ReconnectHostCmd cmd) throws AgentUnavailableException; - public List discoverHosts(AddHostOrStorageCmd cmd) throws DiscoveryException, InvalidParameterValueException; + public List discoverHosts(Long dcId, Long podId, Long clusterId, String clusterName, String url, String username, String password) throws DiscoveryException, InvalidParameterValueException; public List discoverHosts(AddHostCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException; public List discoverHosts(AddSecondaryStorageCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException; } diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java index 491cd748f7f..e96e9b6744f 100755 --- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -73,7 +73,6 @@ import com.cloud.alert.AlertManager; import com.cloud.api.BaseCmd; import com.cloud.api.ServerApiException; import com.cloud.api.commands.AddHostCmd; -import com.cloud.api.commands.AddHostOrStorageCmd; import com.cloud.api.commands.AddSecondaryStorageCmd; import com.cloud.api.commands.CancelMaintenanceCmd; import com.cloud.api.commands.DeleteHostCmd; @@ -485,23 +484,25 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory { @Override public List discoverHosts(AddHostCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException { - return discoverHosts((AddHostOrStorageCmd)cmd); + Long dcId = cmd.getZoneId(); + Long podId = cmd.getPodId(); + Long clusterId = cmd.getClusterId(); + String clusterName = cmd.getClusterName(); + String url = cmd.getUrl(); + String username = cmd.getUsername(); + String password = cmd.getPassword(); + return discoverHosts(dcId, podId, clusterId, clusterName, url, username, password); } @Override public List discoverHosts(AddSecondaryStorageCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException { - return discoverHosts((AddHostOrStorageCmd)cmd); + Long dcId = cmd.getZoneId(); + String url = cmd.getUrl(); + return discoverHosts(dcId, null, null, null, url, null, null); } @Override - public List discoverHosts(AddHostOrStorageCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException { - Long dcId = cmd.getZoneId(); - Long podId = cmd.getPodId(); - Long clusterId = cmd.getClusterId(); - String clusterName = cmd.getName(); - String url = cmd.getUrl(); - String username = cmd.getUsername(); - String password = cmd.getPassword(); + public List discoverHosts(Long dcId, Long podId, Long clusterId, String clusterName, String url, String username, String password) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException { URI uri = null; //Check if the zone exists in the system diff --git a/server/src/com/cloud/api/commands/AddHostCmd.java b/server/src/com/cloud/api/commands/AddHostCmd.java index 17559cae9d1..92ebf8ad7f4 100644 --- a/server/src/com/cloud/api/commands/AddHostCmd.java +++ b/server/src/com/cloud/api/commands/AddHostCmd.java @@ -31,6 +31,7 @@ import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseCmd; import com.cloud.api.BaseCmd.Manager; import com.cloud.api.Implementation; +import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.ApiResponseSerializer; import com.cloud.api.response.HostResponse; @@ -45,14 +46,72 @@ import com.cloud.storage.GuestOSCategoryVO; import com.cloud.vm.UserVmVO; @Implementation(method="discoverHosts", manager=Manager.AgentManager) -public class AddHostCmd extends AddHostOrStorageCmd { +public class AddHostCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddHostCmd.class.getName()); private static final String s_name = "addhostresponse"; + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @Parameter(name="clusterid", type=CommandType.LONG) + private Long clusterId; + + @Parameter(name="clustername", type=CommandType.STRING) + private String clusterName; + + @Parameter(name="password", type=CommandType.STRING, required=true) + private String password; + + @Parameter(name="podid", type=CommandType.LONG) + private Long podId; + + @Parameter(name="url", type=CommandType.STRING, required=true) + private String url; + + @Parameter(name="username", type=CommandType.STRING, required=true) + private String username; + + @Parameter(name="zoneid", type=CommandType.LONG, required=true) + private Long zoneId; + + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public Long getClusterId() { + return clusterId; + } + + public String getClusterName() { + return clusterName; + } + + public String getPassword() { + return password; + } + + public Long getPodId() { + return podId; + } + + public String getUrl() { + return url; + } + + public String getUsername() { + return username; + } + + public Long getZoneId() { + return zoneId; + } + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// - + @Override public String getName() { return s_name; diff --git a/server/src/com/cloud/api/commands/AddSecondaryStorageCmd.java b/server/src/com/cloud/api/commands/AddSecondaryStorageCmd.java index 94e4e7b2056..915cbf0588d 100644 --- a/server/src/com/cloud/api/commands/AddSecondaryStorageCmd.java +++ b/server/src/com/cloud/api/commands/AddSecondaryStorageCmd.java @@ -30,6 +30,7 @@ import com.cloud.api.ApiDBUtils; import com.cloud.api.BaseCmd; import com.cloud.api.BaseCmd.Manager; import com.cloud.api.Implementation; +import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.api.response.ApiResponseSerializer; import com.cloud.api.response.HostResponse; @@ -40,36 +41,32 @@ import com.cloud.host.Status.Event; import com.cloud.storage.GuestOSCategoryVO; @Implementation(method="discoverHosts", manager=Manager.AgentManager) -public class AddSecondaryStorageCmd extends AddHostOrStorageCmd { +public class AddSecondaryStorageCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddSecondaryStorageCmd.class.getName()); private static final String s_name = "addsecondarystorageresponse"; - ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - - public Long getClusterId() { - return null; - } - - public String getClusterName() { - return null; + + @Parameter(name="url", type=CommandType.STRING, required=true) + private String url; + + @Parameter(name="zoneid", type=CommandType.LONG) + private Long zoneId; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public String getUrl() { + return url; } - public String getPassword() { - return null; + public Long getZoneId() { + return zoneId; } - public Long getPodId() { - return null; - } - - public String getUsername() { - return null; - } - - ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -106,16 +103,18 @@ public class AddSecondaryStorageCmd extends AddHostOrStorageCmd { hostResponse.setState(host.getStatus()); hostResponse.setIpAddress(host.getPrivateIpAddress()); hostResponse.setVersion(host.getVersion()); - + GuestOSCategoryVO guestOSCategory = ApiDBUtils.getHostGuestOSCategory(host.getId()); if (guestOSCategory != null) { hostResponse.setOsCategoryId(guestOSCategory.getId()); hostResponse.setOsCategoryName(guestOSCategory.getName()); } hostResponse.setZoneName(ApiDBUtils.findZoneById(host.getDataCenterId()).getName()); - hostResponse.setPodName(ApiDBUtils.findPodById(host.getPodId()).getName()); - - + + if (host.getPodId() != null) { + hostResponse.setPodName(ApiDBUtils.findPodById(host.getPodId()).getName()); + } + if (host.getType().toString().equals("Storage")) { hostResponse.setDiskSizeTotal(host.getTotalSize()); hostResponse.setDiskSizeAllocated(0L); diff --git a/server/src/com/cloud/api/commands/ListAccountsCmd.java b/server/src/com/cloud/api/commands/ListAccountsCmd.java index 99a4484f5f3..5ea40098d0f 100644 --- a/server/src/com/cloud/api/commands/ListAccountsCmd.java +++ b/server/src/com/cloud/api/commands/ListAccountsCmd.java @@ -223,7 +223,7 @@ public class ListAccountsCmd extends BaseListCmd { acctResponse.setCleanupRequired(account.getNeedsCleanup()); } - acctResponse.setName("account"); + acctResponse.setResponseName("account"); accountResponses.add(acctResponse); } diff --git a/server/src/com/cloud/api/commands/ListHostsCmd.java b/server/src/com/cloud/api/commands/ListHostsCmd.java index 2aef89f5758..4124c6b0b6e 100644 --- a/server/src/com/cloud/api/commands/ListHostsCmd.java +++ b/server/src/com/cloud/api/commands/ListHostsCmd.java @@ -149,19 +149,25 @@ public class ListHostsCmd extends BaseListCmd { hostResponse.setOsCategoryName(guestOSCategory.getName()); } hostResponse.setZoneName(ApiDBUtils.findZoneById(host.getDataCenterId()).getName()); - hostResponse.setPodName(ApiDBUtils.findPodById(host.getPodId()).getName()); + + if (host.getPodId() != null) { + hostResponse.setPodName(ApiDBUtils.findPodById(host.getPodId()).getName()); + } + + DecimalFormat decimalFormat = new DecimalFormat("#.##"); // calculate cpu allocated by vm - int cpu = 0; - String cpuAlloc = null; - DecimalFormat decimalFormat = new DecimalFormat("#.##"); - List instances = ApiDBUtils.listUserVMsByHostId(host.getId()); - for (UserVmVO vm : instances) { - ServiceOffering so = ApiDBUtils.findServiceOfferingById(vm.getServiceOfferingId()); - cpu += so.getCpu() * so.getSpeed(); + if ((host.getCpus() != null) && (host.getSpeed() != null)) { + int cpu = 0; + String cpuAlloc = null; + List instances = ApiDBUtils.listUserVMsByHostId(host.getId()); + for (UserVmVO vm : instances) { + ServiceOffering so = ApiDBUtils.findServiceOfferingById(vm.getServiceOfferingId()); + cpu += so.getCpu() * so.getSpeed(); + } + cpuAlloc = decimalFormat.format(((float) cpu / (float) (host.getCpus() * host.getSpeed())) * 100f) + "%"; + hostResponse.setCpuAllocated(cpuAlloc); } - cpuAlloc = decimalFormat.format(((float) cpu / (float) (host.getCpus() * host.getSpeed())) * 100f) + "%"; - hostResponse.setCpuAllocated(cpuAlloc); // calculate cpu utilized String cpuUsed = null; diff --git a/ui/test/scripts/cloud.core.test.js b/ui/test/scripts/cloud.core.test.js index e9c61562647..3f8cb95694d 100644 --- a/ui/test/scripts/cloud.core.test.js +++ b/ui/test/scripts/cloud.core.test.js @@ -322,7 +322,7 @@ $(document).ready(function() { dataType: "json", async: false, success: function(json) { - userJSONToTemplate(json.createuserresponse.user[0], template); + userJSONToTemplate(json.createuserresponse, template); loadingImg.hide(); rowContainer.show(); },