Let discovers be able to identify itself

This commit is contained in:
Kelven Yang 2010-12-15 13:46:52 -08:00
parent 5726ebc62b
commit 2719972cf6
8 changed files with 59 additions and 7 deletions

View File

@ -62,6 +62,9 @@ public class AddHostCmd extends BaseCmd {
@Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required=true, description="the Zone ID for the host")
private Long zoneId;
@Parameter(name=ApiConstants.HYPERVISOR, type=CommandType.STRING, required=false, description="hypervisor type of the host")
private String hypervisor;
/////////////////////////////////////////////////////
@ -95,6 +98,10 @@ public class AddHostCmd extends BaseCmd {
public Long getZoneId() {
return zoneId;
}
public String getHypervisor() {
return hypervisor;
}
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////

View File

@ -222,7 +222,8 @@ public interface AgentManager extends Manager {
public boolean executeUserRequest(long hostId, Event event) throws AgentUnavailableException;
public boolean reconnect(final long hostId) throws AgentUnavailableException;
public List<HostVO> discoverHosts(Long dcId, Long podId, Long clusterId, String clusterName, String url, String username, String password) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException;
public List<HostVO> discoverHosts(Long dcId, Long podId, Long clusterId, String clusterName, String url, String username, String password, String hypervisor)
throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException;
Answer easySend(Long hostId, Command cmd, int timeout);

View File

@ -118,6 +118,7 @@ import com.cloud.host.Status;
import com.cloud.host.Status.Event;
import com.cloud.host.dao.DetailsDao;
import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.hypervisor.kvm.resource.KvmDummyResourceBase;
import com.cloud.maid.StackMaid;
@ -557,18 +558,19 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS
if( clusterName == null && clusterId == null ) {
clusterName = "Standalone-" + url;
}
return discoverHosts(dcId, podId, clusterId, clusterName, url, username, password);
return discoverHosts(dcId, podId, clusterId, clusterName, url, username, password, cmd.getHypervisor());
}
@Override
public List<? extends Host> discoverHosts(AddSecondaryStorageCmd cmd) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException {
Long dcId = cmd.getZoneId();
String url = cmd.getUrl();
return discoverHosts(dcId, null, null, null, url, null, null);
return discoverHosts(dcId, null, null, null, url, null, null, "");
}
@Override
public List<HostVO> discoverHosts(Long dcId, Long podId, Long clusterId, String clusterName, String url, String username, String password) throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException {
public List<HostVO> discoverHosts(Long dcId, Long podId, Long clusterId, String clusterName, String url, String username, String password, String hypervisorType)
throws IllegalArgumentException, DiscoveryException, InvalidParameterValueException {
URI uri = null;
//Check if the zone exists in the system
@ -639,6 +641,11 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, ResourceS
Enumeration<Discoverer> en = _discoverers.enumeration();
while (en.hasMoreElements()) {
Discoverer discoverer = en.nextElement();
if(hypervisorType != null) {
if(!discoverer.matchHypervisor(hypervisorType))
continue;
}
Map<? extends ServerResource, Map<String, String>> resources = null;
try {

View File

@ -29,6 +29,7 @@ import com.cloud.host.Host;
import com.cloud.host.HostVO;
import com.cloud.host.Status;
import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.hypervisor.kvm.resource.KvmDummyResourceBase;
import com.cloud.resource.Discoverer;
@ -310,6 +311,18 @@ public class KvmServerDiscoverer extends DiscovererBase implements Discoverer,
public void postDiscovery(List<HostVO> hosts, long msId)
throws DiscoveryException {
// TODO Auto-generated method stub
}
public Hypervisor.HypervisorType getHypervisorType() {
return Hypervisor.HypervisorType.KVM;
}
@Override
public boolean matchHypervisor(String hypervisor) {
// for backwards compatibility, if not supplied, always let to try it
if(hypervisor == null)
return true;
return Hypervisor.HypervisorType.KVM.toString().equalsIgnoreCase(hypervisor);
}
}

View File

@ -52,6 +52,7 @@ import com.cloud.host.HostInfo;
import com.cloud.host.HostVO;
import com.cloud.host.Status;
import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.hypervisor.xen.resource.CitrixResourceBase;
import com.cloud.hypervisor.xen.resource.XcpServerResource;
@ -478,7 +479,14 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
createXsToolsISO();
return true;
}
@Override
public boolean matchHypervisor(String hypervisor) {
if(hypervisor == null)
return true;
return Hypervisor.HypervisorType.XenServer.toString().equalsIgnoreCase(hypervisor);
}
@Override
public void postDiscovery(List<HostVO> hosts, long msId) throws DiscoveryException{
//do nothing
@ -540,4 +548,5 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
public boolean processTimeout(long agentId, long seq) {
return false;
}
}

View File

@ -23,6 +23,7 @@ import java.util.Map;
import com.cloud.exception.DiscoveryException;
import com.cloud.host.HostVO;
import com.cloud.hypervisor.Hypervisor;
import com.cloud.utils.component.Adapter;
/**
@ -41,4 +42,6 @@ public interface Discoverer extends Adapter {
Map<? extends ServerResource, Map<String, String>> find(long dcId, Long podId, Long clusterId, URI uri, String username, String password) throws DiscoveryException;
void postDiscovery(List<HostVO> hosts, long msId) throws DiscoveryException;
boolean matchHypervisor(String hypervisor);
}

View File

@ -30,6 +30,7 @@ import javax.naming.ConfigurationException;
import org.apache.log4j.Logger;
import com.cloud.host.HostVO;
import com.cloud.hypervisor.Hypervisor;
@Local(value=Discoverer.class)
public class DummyHostDiscoverer implements Discoverer {
@ -88,7 +89,12 @@ public class DummyHostDiscoverer implements Discoverer {
public boolean stop() {
return true;
}
@Override
public boolean matchHypervisor(String hypervisor) {
return false;
}
@Override
public void postDiscovery(List<HostVO> hosts, long msId) {
//do nothing

View File

@ -34,6 +34,7 @@ import com.cloud.configuration.dao.ConfigurationDao;
import com.cloud.host.HostVO;
import com.cloud.host.Status.Event;
import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor;
import com.cloud.resource.Discoverer;
import com.cloud.resource.DiscovererBase;
import com.cloud.resource.ServerResource;
@ -237,6 +238,11 @@ public class SecondaryStorageDiscoverer extends DiscovererBase implements Discov
}
return true;
}
@Override
public boolean matchHypervisor(String hypervisor) {
return true;
}
@Override
public void postDiscovery(List<HostVO> hosts, long msId) {