diff --git a/api/src/com/cloud/api/commands/AddClusterCmd.java b/api/src/com/cloud/api/commands/AddClusterCmd.java index 88d77fb0e99..da6ad9bd592 100644 --- a/api/src/com/cloud/api/commands/AddClusterCmd.java +++ b/api/src/com/cloud/api/commands/AddClusterCmd.java @@ -10,12 +10,14 @@ import com.cloud.api.BaseCmd; import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; +import com.cloud.api.response.ClusterResponse; import com.cloud.api.response.HostResponse; import com.cloud.api.response.ListResponse; import com.cloud.exception.DiscoveryException; import com.cloud.host.Host; +import com.cloud.org.Cluster; -@Implementation(description="Adds a new cluster", responseObject=HostResponse.class) +@Implementation(description="Adds a new cluster", responseObject=ClusterResponse.class) public class AddClusterCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddClusterCmd.class.getName()); @@ -90,19 +92,19 @@ public class AddClusterCmd extends BaseCmd { @Override public void execute(){ try { - List result = _resourceService.discoverCluster(this); - ListResponse response = new ListResponse(); - List hostResponses = new ArrayList(); + List result = _resourceService.discoverCluster(this); + ListResponse response = new ListResponse(); + List clusterResponses = new ArrayList(); if (result != null) { - for (Host host : result) { - HostResponse hostResponse = _responseGenerator.createHostResponse(host); - hostResponses.add(hostResponse); + for (Cluster cluster : result) { + ClusterResponse clusterResponse = _responseGenerator.createClusterResponse(cluster); + clusterResponses.add(clusterResponse); } } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add host cluster"); + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add cluster"); } - response.setResponses(hostResponses); + response.setResponses(clusterResponses); response.setResponseName(getCommandName()); this.setResponseObject(response); diff --git a/api/src/com/cloud/resource/ResourceService.java b/api/src/com/cloud/resource/ResourceService.java index 3014027c8d1..34de1412c70 100644 --- a/api/src/com/cloud/resource/ResourceService.java +++ b/api/src/com/cloud/resource/ResourceService.java @@ -32,6 +32,7 @@ import com.cloud.exception.AgentUnavailableException; import com.cloud.exception.DiscoveryException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.Host; +import com.cloud.org.Cluster; public interface ResourceService { /** @@ -56,7 +57,7 @@ public interface ResourceService { * @throws DiscoveryException * @throws InvalidParameterValueException */ - List discoverCluster(AddClusterCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException; + List discoverCluster(AddClusterCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException; boolean deleteCluster(DeleteClusterCmd cmd) throws InvalidParameterValueException; List discoverHosts(AddHostCmd 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 70b8564cf27..9c9e86ef97b 100755 --- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -531,7 +531,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS } @Override - public List discoverCluster(AddClusterCmd cmd) + public List discoverCluster(AddClusterCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException { Long dcId = cmd.getZoneId(); Long podId = cmd.getPodId(); @@ -586,25 +586,26 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS throw new InvalidParameterValueException("Please specify a valid hypervisor"); } + List result = new ArrayList(); + long clusterId = 0; - if (clusterName != null) { - ClusterVO cluster = new ClusterVO(dcId, podId, clusterName); - cluster.setHypervisorType(cmd.getHypervisor()); - - cluster.setClusterType(clusterType); - try { - cluster = _clusterDao.persist(cluster); - } catch (Exception e) { - cluster = _clusterDao.findBy(clusterName, podId); - if (cluster == null) { - throw new CloudRuntimeException("Unable to create cluster " + clusterName + " in pod " + podId + " and data center " + dcId, e); - } + ClusterVO cluster = new ClusterVO(dcId, podId, clusterName); + cluster.setHypervisorType(cmd.getHypervisor()); + + cluster.setClusterType(clusterType); + try { + cluster = _clusterDao.persist(cluster); + } catch (Exception e) { + cluster = _clusterDao.findBy(clusterName, podId); + if (cluster == null) { + throw new CloudRuntimeException("Unable to create cluster " + clusterName + " in pod " + podId + " and data center " + dcId, e); } - clusterId = cluster.getId(); } + clusterId = cluster.getId(); + result.add(cluster); if(clusterType == Cluster.ClusterType.CloudManaged) { - return _hostDao.listByCluster(clusterId); + return result; } boolean success = false; @@ -641,7 +642,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS } s_logger.info("External cluster has been successfully discovered by " + discoverer.getName()); success = true; - return hosts; + return result; } s_logger.warn("Unable to find the server resources at " + url);