- public Heat getHeatClient(CloudSite cloudSite, String tenantId) throws MsoException {
- String cloudId = cloudSite.getId();
- // For DCP/LCP, the region should be the cloudId.
- String region = cloudSite.getRegionId();
-
- // Obtain an MSO token for the tenant
- CloudIdentity cloudIdentity = cloudSite.getIdentityService();
- logger.debug(FOUND, cloudIdentity.toString());
- MsoTenantUtils tenantUtils =
- tenantUtilsFactory.getTenantUtilsByServerType(cloudIdentity.getIdentityServerType());
- String keystoneUrl = tenantUtils.getKeystoneUrl(cloudId, cloudIdentity);
- logger.debug("keystoneUrl={}", keystoneUrl);
- String heatUrl = null;
- String tokenId = null;
-
- try {
- if (ServerType.KEYSTONE.equals(cloudIdentity.getIdentityServerType())) {
- Keystone keystoneTenantClient = new Keystone(keystoneUrl);
- Access access = null;
-
- Authentication credentials = authenticationMethodFactory.getAuthenticationFor(cloudIdentity);
-
- OpenStackRequest<Access> request =
- keystoneTenantClient.tokens().authenticate(credentials).withTenantId(tenantId);
-
- access = executeAndRecordOpenstackRequest(request);
-
- try {
- // Isolate trying to printout the region IDs
- try {
- logger.debug("access={}", access.toString());
- for (Access.Service service : access.getServiceCatalog()) {
- List<Access.Service.Endpoint> endpoints = service.getEndpoints();
- for (Access.Service.Endpoint endpoint : endpoints) {
- logger.debug("AIC returned region={}", endpoint.getRegion());
- }
- }
- } catch (Exception e) {
- logger.debug("Encountered an error trying to printout Access object returned from AIC. {}",
- e.getMessage(), e);
- }
- heatUrl = KeystoneUtils.findEndpointURL(access.getServiceCatalog(), "orchestration", region,
- "public");
- logger.debug("heatUrl={}, region={}", heatUrl, region);
- } catch (RuntimeException e) {
- // This comes back for not found (probably an incorrect region ID)
- String error = "AIC did not match an orchestration service for: region=" + region + ",cloud="
- + cloudIdentity.getIdentityUrl();
- throw new MsoAdapterException(error, e);
- }
- tokenId = access.getToken().getId();
-
- } else if (ServerType.KEYSTONE_V3.equals(cloudIdentity.getIdentityServerType())) {
- try {
- KeystoneAuthHolder holder = keystoneV3Authentication.getToken(cloudSite, tenantId, "orchestration");
- tokenId = holder.getId();
-
- heatUrl = holder.getServiceUrl();
- } catch (ServiceEndpointNotFoundException e) {
- // This comes back for not found (probably an incorrect region ID)
- String error = "cloud did not match an orchestration service for: region=" + region + ",cloud="
- + cloudIdentity.getIdentityUrl();
- throw new MsoAdapterException(error, e);
- }
- }
- } catch (OpenStackResponseException e) {
- if (e.getStatus() == 401) {
- // Authentication error.
- String error = "Authentication Failure: tenant=" + tenantId + ",cloud=" + cloudIdentity.getId();
-
- throw new MsoAdapterException(error);
- } else {
- throw keystoneErrorToMsoException(e, TOKEN_AUTH);
- }
- } catch (OpenStackConnectException e) {
- // Connection to Openstack failed
- MsoIOException me = new MsoIOException(e.getMessage(), e);
- me.addContext(TOKEN_AUTH);
- throw me;
- } catch (RuntimeException e) {
- // Catch-all
- throw runtimeExceptionToMsoException(e, TOKEN_AUTH);
- }
- Heat heatClient = new Heat(heatUrl);
- heatClient.token(tokenId);