use of com.cloud.legacymodel.exceptions.DiscoveryException in project cosmic by MissionCriticalCloud.
the class AddClusterCmdTest method testExecuteForNullResult.
@Test
public void testExecuteForNullResult() {
final ResourceService resourceService = Mockito.mock(ResourceService.class);
try {
Mockito.when(resourceService.discoverCluster(addClusterCmd)).thenReturn(null);
} catch (final ResourceInUseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (final IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (final DiscoveryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
addClusterCmd._resourceService = resourceService;
try {
addClusterCmd.execute();
} catch (final ServerApiException exception) {
Assert.assertEquals("Failed to add cluster", exception.getDescription());
}
}
use of com.cloud.legacymodel.exceptions.DiscoveryException in project cosmic by MissionCriticalCloud.
the class XcpServerDiscoverer method find.
@Override
public Map<? extends ServerResource, Map<String, String>> find(final long dcId, final Long podId, final Long clusterId, final URI url, final String username, final String password, final List<String> hostTags) throws DiscoveryException {
final Map<CitrixResourceBase, Map<String, String>> resources = new HashMap<>();
Connection conn = null;
if (!url.getScheme().equals("http")) {
final String msg = "urlString is not http so we're not taking care of the discovery for this: " + url;
s_logger.debug(msg);
return null;
}
if (clusterId == null) {
final String msg = "must specify cluster Id when add host";
s_logger.debug(msg);
throw new RuntimeException(msg);
}
if (podId == null) {
final String msg = "must specify pod Id when add host";
s_logger.debug(msg);
throw new RuntimeException(msg);
}
final ClusterVO cluster = this._clusterDao.findById(clusterId);
if (cluster == null || cluster.getHypervisorType() != HypervisorType.XenServer) {
if (s_logger.isInfoEnabled()) {
s_logger.info("invalid cluster id or cluster is not for XenServer hypervisors");
}
return null;
}
try {
final String hostname = url.getHost();
final InetAddress ia = InetAddress.getByName(hostname);
final String hostIp = ia.getHostAddress();
final Queue<String> pass = new LinkedList<>();
pass.add(password);
conn = this._connPool.getConnect(hostIp, username, pass);
if (conn == null) {
final String msg = "Unable to get a connection to " + url;
s_logger.debug(msg);
throw new DiscoveryException(msg);
}
final Set<Pool> pools = Pool.getAll(conn);
final Pool pool = pools.iterator().next();
final Pool.Record pr = pool.getRecord(conn);
String poolUuid = pr.uuid;
final Map<Host, Host.Record> hosts = Host.getAllRecords(conn);
String latestHotFix = "";
if (poolHasHotFix(conn, hostIp, XenserverConfigs.XSHotFix62ESP1004)) {
latestHotFix = XenserverConfigs.XSHotFix62ESP1004;
} else if (poolHasHotFix(conn, hostIp, XenserverConfigs.XSHotFix62ESP1)) {
latestHotFix = XenserverConfigs.XSHotFix62ESP1;
}
/*set cluster hypervisor type to xenserver*/
final ClusterVO clu = this._clusterDao.findById(clusterId);
if (clu.getGuid() == null) {
setClusterGuid(clu, poolUuid);
} else {
final List<HostVO> clusterHosts = this._resourceMgr.listAllHostsInCluster(clusterId);
if (clusterHosts != null && clusterHosts.size() > 0) {
if (!clu.getGuid().equals(poolUuid)) {
final String msg = "Please join the host " + hostIp + " to XS pool " + clu.getGuid() + " through XC/XS before adding it through CS UI";
s_logger.warn(msg);
throw new DiscoveryException(msg);
}
} else {
setClusterGuid(clu, poolUuid);
}
}
// can not use this conn after this point, because this host may join a pool, this conn is retired
if (conn != null) {
try {
Session.logout(conn);
} catch (final Exception e) {
s_logger.debug("Caught exception during logout", e);
}
conn.dispose();
conn = null;
}
poolUuid = clu.getGuid();
this._clusterDao.update(clusterId, clu);
if (this._checkHvm) {
for (final Map.Entry<Host, Host.Record> entry : hosts.entrySet()) {
final Host.Record record = entry.getValue();
boolean support_hvm = false;
for (final String capability : record.capabilities) {
if (capability.contains("hvm")) {
support_hvm = true;
break;
}
}
if (!support_hvm) {
final String msg = "Unable to add host " + record.address + " because it doesn't support hvm";
this._alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, dcId, podId, msg, msg);
s_logger.debug(msg);
throw new RuntimeException(msg);
}
}
}
for (final Map.Entry<Host, Host.Record> entry : hosts.entrySet()) {
final Host.Record record = entry.getValue();
final String hostAddr = record.address;
final String prodVersion = CitrixHelper.getProductVersion(record);
final String xenVersion = record.softwareVersion.get("xen");
String hostOS = record.softwareVersion.get("product_brand");
if (hostOS == null) {
hostOS = record.softwareVersion.get("platform_name");
}
final String hostOSVer = prodVersion;
final String hostKernelVer = record.softwareVersion.get("linux");
if (this._resourceMgr.findHostByGuid(record.uuid) != null) {
s_logger.debug("Skipping " + record.address + " because " + record.uuid + " is already in the database.");
continue;
}
final CitrixResourceBase resource = createServerResource(dcId, podId, record, latestHotFix);
s_logger.info("Found host " + record.hostname + " ip=" + record.address + " product version=" + prodVersion);
final Map<String, String> details = new HashMap<>();
final Map<String, Object> params = new HashMap<>();
details.put("url", hostAddr);
details.put("username", username);
params.put("username", username);
details.put("password", password);
params.put("password", password);
params.put("zone", Long.toString(dcId));
params.put("guid", record.uuid);
params.put("pod", podId.toString());
params.put("cluster", clusterId.toString());
params.put("pool", poolUuid);
params.put("ipaddress", record.address);
details.put(HostInfo.HOST_OS, hostOS);
details.put(HostInfo.HOST_OS_VERSION, hostOSVer);
details.put(HostInfo.HOST_OS_KERNEL_VERSION, hostKernelVer);
details.put(HostInfo.HYPERVISOR_VERSION, xenVersion);
final String privateNetworkLabel = this._networkMgr.getDefaultManagementTrafficLabel(dcId, HypervisorType.XenServer);
final String storageNetworkLabel = this._networkMgr.getDefaultStorageTrafficLabel(dcId, HypervisorType.XenServer);
if (!params.containsKey("private.network.device") && privateNetworkLabel != null) {
params.put("private.network.device", privateNetworkLabel);
details.put("private.network.device", privateNetworkLabel);
}
if (!params.containsKey("storage.network.device1") && storageNetworkLabel != null) {
params.put("storage.network.device1", storageNetworkLabel);
details.put("storage.network.device1", storageNetworkLabel);
}
params.put("router.aggregation.command.each.timeout", this._configDao.getValue(Config.RouterAggregationCommandEachTimeout.toString()));
params.put("wait", Integer.toString(this._wait));
details.put("wait", Integer.toString(this._wait));
params.put("migratewait", this._configDao.getValue(Config.MigrateWait.toString()));
params.put(Config.XenServerMaxNics.toString().toLowerCase(), this._configDao.getValue(Config.XenServerMaxNics.toString()));
params.put(Config.XenServerHeartBeatTimeout.toString().toLowerCase(), this._configDao.getValue(Config.XenServerHeartBeatTimeout.toString()));
params.put(Config.XenServerHeartBeatInterval.toString().toLowerCase(), this._configDao.getValue(Config.XenServerHeartBeatInterval.toString()));
params.put(Config.InstanceName.toString().toLowerCase(), this._instance);
details.put(Config.InstanceName.toString().toLowerCase(), this._instance);
try {
resource.configure("XenServer", params);
} catch (final ConfigurationException e) {
this._alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, dcId, podId, "Unable to add " + record.address, "Error is " + e.getMessage());
s_logger.warn("Unable to instantiate " + record.address, e);
continue;
}
resource.start();
resources.put(resource, details);
}
} catch (final SessionAuthenticationFailed e) {
throw new DiscoveredWithErrorException("Authentication error");
} catch (final XenAPIException e) {
s_logger.warn("XenAPI exception", e);
return null;
} catch (final XmlRpcException e) {
s_logger.warn("Xml Rpc Exception", e);
return null;
} catch (final UnknownHostException e) {
s_logger.warn("Unable to resolve the host name", e);
return null;
} catch (final Exception e) {
s_logger.debug("other exceptions: " + e.toString(), e);
return null;
}
return resources;
}
use of com.cloud.legacymodel.exceptions.DiscoveryException in project cosmic by MissionCriticalCloud.
the class AddHostCmdTest method testExecuteForNullResult.
@Test
public void testExecuteForNullResult() {
final ResourceService resourceService = Mockito.mock(ResourceService.class);
addHostCmd._resourceService = resourceService;
try {
Mockito.when(resourceService.discoverHosts(addHostCmd)).thenReturn(null);
} catch (final InvalidParameterValueException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (final IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (final DiscoveryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
addHostCmd.execute();
} catch (final ServerApiException exception) {
Assert.assertEquals("Failed to add host", exception.getDescription());
}
}
use of com.cloud.legacymodel.exceptions.DiscoveryException in project cosmic by MissionCriticalCloud.
the class AddImageStoreCmd method execute.
// ///////////////////////////////////////////////////
// ///////////////// Accessors ///////////////////////
// ///////////////////////////////////////////////////
@Override
public void execute() {
try {
final ImageStore result = _storageService.discoverImageStore(getName(), getUrl(), getProviderName(), getZoneId(), getDetails());
ImageStoreResponse storeResponse = null;
if (result != null) {
storeResponse = _responseGenerator.createImageStoreResponse(result);
storeResponse.setResponseName(getCommandName());
storeResponse.setObjectName("imagestore");
setResponseObject(storeResponse);
} else {
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add secondary storage");
}
} catch (final DiscoveryException ex) {
s_logger.warn("Exception: ", ex);
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage());
}
}
use of com.cloud.legacymodel.exceptions.DiscoveryException in project cosmic by MissionCriticalCloud.
the class AddClusterCmd method execute.
@Override
public void execute() {
try {
final List<? extends Cluster> result = _resourceService.discoverCluster(this);
final ListResponse<ClusterResponse> response = new ListResponse<>();
final List<ClusterResponse> clusterResponses = new ArrayList<>();
if (result != null && result.size() > 0) {
for (final Cluster cluster : result) {
final ClusterResponse clusterResponse = _responseGenerator.createClusterResponse(cluster, false);
clusterResponses.add(clusterResponse);
}
} else {
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add cluster");
}
response.setResponses(clusterResponses);
response.setResponseName(getCommandName());
setResponseObject(response);
} catch (final DiscoveryException ex) {
s_logger.warn("Exception: ", ex);
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage());
} catch (final ResourceInUseException ex) {
s_logger.warn("Exception: ", ex);
final ServerApiException e = new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage());
for (final String proxyObj : ex.getIdProxyList()) {
e.addProxyObject(proxyObj);
}
throw e;
}
}
Aggregations