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;
}
OpenstackClient getOpenstackClient(String url, String msoId, String msoPass, String regionId, String tenantId,
- String keystoneVersion) throws HeatBridgeException;
+ String keystoneVersion, String userDomainName, String projectDomainName) throws HeatBridgeException;
}
@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
return projectName;
}
+ public Identifier getProjectNameIdentifier() {
+ return Identifier.byName(projectName);
+ }
+
public static class OpenstackAccessBuilder {
private String baseUrl;
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(),
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;
@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);
}
}