Fix Heatbridge auth for Keystone-v3 86/108986/1
authorBoslet, Cory <cory.boslet@att.com>
Tue, 9 Jun 2020 17:48:52 +0000 (13:48 -0400)
committerBenjamin, Max (mb388a) <mb388a@att.com>
Tue, 9 Jun 2020 17:48:58 +0000 (13:48 -0400)
Fix Heatbridge auth for Keystone-v3

Issue-ID: SO-2980
Signed-off-by: Benjamin, Max (mb388a) <mb388a@att.com>
Change-Id: Idacce2beebde14f43817ada59fb0d593504c6bdd

adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/HeatBridgeImpl.java
adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/factory/MsoCloudClientFactory.java
adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/factory/MsoCloudClientFactoryImpl.java
adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/api/OpenstackAccess.java
adapters/mso-openstack-adapters/src/main/java/org/onap/so/heatbridge/openstack/factory/OpenstackClientFactoryImpl.java
adapters/mso-openstack-adapters/src/test/java/org/onap/so/heatbridge/factory/MsoCloudClientFactoryImplTest.java

index 32cd92d..53736e9 100644 (file)
@@ -145,7 +145,7 @@ public class HeatBridgeImpl implements HeatBridgeApi {
         logger.trace("Keystone Version: {} ", keystoneVersion);
         this.osClient = new MsoCloudClientFactoryImpl(new OpenstackClientFactoryImpl()).getOpenstackClient(
                 cloudIdentity.getIdentityUrl(), cloudIdentity.getMsoId(), cloudIdentity.getMsoPass(), regionId,
-                tenantId, keystoneVersion);
+                tenantId, keystoneVersion, cloudIdentity.getUserDomainName(), cloudIdentity.getProjectDomainName());
         logger.trace("Successfully authenticated with keystone for tenant: {} and region: {}", tenantId, regionId);
         return osClient;
     }
index a9a63b3..3c20931 100644 (file)
@@ -55,5 +55,5 @@ public interface MsoCloudClientFactory {
 
 
     OpenstackClient getOpenstackClient(String url, String msoId, String msoPass, String regionId, String tenantId,
-            String keystoneVersion) throws HeatBridgeException;
+            String keystoneVersion, String userDomainName, String projectDomainName) throws HeatBridgeException;
 }
index 88a7d3d..e299f6f 100644 (file)
@@ -64,21 +64,26 @@ public class MsoCloudClientFactoryImpl implements MsoCloudClientFactory {
 
     @Override
     public OpenstackClient getOpenstackClient(@Nonnull String url, @Nonnull String msoId, @Nonnull String msoPass,
-            @Nonnull String regionId, @Nonnull String tenantId, @Nonnull String keystoneVersion)
-            throws HeatBridgeException {
+            @Nonnull String regionId, @Nonnull String tenantId, @Nonnull String keystoneVersion, String userDomainName,
+            String projectDomainName) throws HeatBridgeException {
         Objects.requireNonNull(url, "Null openstack url!");
         Objects.requireNonNull(msoId, "Null openstack user id!");
         Objects.requireNonNull(msoPass, "Null openstack password!");
         Objects.requireNonNull(regionId, "Null regionId ID!");
         Objects.requireNonNull(tenantId, "Null tenant ID!");
-        Objects.requireNonNull(tenantId, "Null keystone version");
+        Objects.requireNonNull(keystoneVersion, "Null keystone version");
+        if (userDomainName == null) {
+            userDomainName = HeatBridgeConstants.OS_DEFAULT_DOMAIN_NAME;
+        }
+        if (projectDomainName == null) {
+            projectDomainName = HeatBridgeConstants.OS_DEFAULT_DOMAIN_NAME;
+        }
         try {
             final OpenstackAccess osAccess = new OpenstackAccessBuilder().setBaseUrl(url) // keystone URL
                     .setUser(msoId) // keystone username
                     .setPassword(CryptoUtils.decryptCloudConfigPassword(msoPass)) // keystone decrypted password
                     .setRegion(regionId) // openstack region
-                    .setDomainName(HeatBridgeConstants.OS_DEFAULT_DOMAIN_NAME) // hardcode to "default"
-                    .setTenantId(tenantId) // tenantId
+                    .setDomainName(userDomainName).setProjectName(projectDomainName).setTenantId(tenantId) // tenantId
                     .build();
 
             // Identify the Keystone version
index 69c76fa..d8f2ee7 100644 (file)
@@ -88,6 +88,10 @@ public class OpenstackAccess {
         return projectName;
     }
 
+    public Identifier getProjectNameIdentifier() {
+        return Identifier.byName(projectName);
+    }
+
     public static class OpenstackAccessBuilder {
 
         private String baseUrl;
index bbcd54e..8829c70 100644 (file)
@@ -62,8 +62,8 @@ public class OpenstackClientFactoryImpl implements OpenstackClientFactory {
         try {
             client = OSFactory.builderV3().endpoint(osAccess.getUrl())
                     .credentials(osAccess.getUser(), osAccess.getPassword(), osAccess.getDomainNameIdentifier())
-                    .scopeToProject(Identifier.byId(osAccess.getTenantId())).authenticate()
-                    .useRegion(osAccess.getRegion());
+                    .scopeToProject(Identifier.byId(osAccess.getTenantId()), osAccess.getProjectNameIdentifier())
+                    .authenticate().useRegion(osAccess.getRegion());
             return new OpenstackV3ClientImpl(client);
         } catch (AuthenticationException exception) {
             throw new OpenstackClientException("Failed to authenticate with Keystone-v3: " + osAccess.getUrl(),
index 86400c2..9b5e1e8 100644 (file)
@@ -40,6 +40,8 @@ public class MsoCloudClientFactoryImplTest {
     private static final String ENCRYPTED_PASSWORD = CryptoUtils.encryptCloudConfigPassword("testPassword");
     private static final String REGION_ID = "testCloudRegionId";
     private static final String TENANT_ID = "testTenantId";
+    private static final String USER_DOMAIN_NAME = "userDomainName";
+    private static final String PROJECT_DOMAIN_NAME = "projectDomainName";
 
     private MsoCloudClientFactoryImpl testedObject;
     private OpenstackClientFactory openstackClientFactoryMock;
@@ -52,20 +54,21 @@ public class MsoCloudClientFactoryImplTest {
 
     @Test
     public void getOpenstackClientWithVersion2() throws Exception {
-        testedObject.getOpenstackClient(URL_V2, MSO_ID, ENCRYPTED_PASSWORD, REGION_ID, TENANT_ID, "v2.0");
+        testedObject.getOpenstackClient(URL_V2, MSO_ID, ENCRYPTED_PASSWORD, REGION_ID, TENANT_ID, "v2.0", null, null);
         verify(openstackClientFactoryMock).createOpenstackV2Client(any(OpenstackAccess.class));
     }
 
     @Test
     public void getOpenstackClientWithVersion3() throws Exception {
-        testedObject.getOpenstackClient(URL_V3, MSO_ID, ENCRYPTED_PASSWORD, REGION_ID, TENANT_ID, "v3");
+        testedObject.getOpenstackClient(URL_V3, MSO_ID, ENCRYPTED_PASSWORD, REGION_ID, TENANT_ID, "v3",
+                USER_DOMAIN_NAME, PROJECT_DOMAIN_NAME);
         verify(openstackClientFactoryMock).createOpenstackV3Client(any(OpenstackAccess.class));
     }
 
     @Test(expected = HeatBridgeException.class)
     public void getOpenstackClient_unsupportedVersion() throws Exception {
         testedObject.getOpenstackClient(URL_WITH_UNSUPPORTED_VERSION, MSO_ID, ENCRYPTED_PASSWORD, REGION_ID, TENANT_ID,
-                "UNKNOWN");
+                "UNKNOWN", USER_DOMAIN_NAME, PROJECT_DOMAIN_NAME);
     }
 
 }