use of com.sequenceiq.cloudbreak.idbmms.model.MappingsConfig in project cloudbreak by hortonworks.
the class StackRequestManifester method setupCloudStorageAccountMapping.
@VisibleForTesting
void setupCloudStorageAccountMapping(StackV4Request stackRequest, String environmentCrn, IdBrokerMappingSource mappingSource, String cloudPlatform) {
String stackName = stackRequest.getName();
CloudStorageRequest cloudStorage = stackRequest.getCluster().getCloudStorage();
if (cloudStorage != null && cloudStorage.getAccountMapping() == null) {
// getAccountMapping() == null means we need to fetch mappings from IDBMMS.
if (mappingSource == IdBrokerMappingSource.IDBMMS) {
LOGGER.info("Fetching account mappings from IDBMMS associated with environment {} for stack {}.", environmentCrn, stackName);
MappingsConfig mappingsConfig;
try {
// Must pass the internal actor here as this operation is internal-use only; requests with other actors will be always rejected.
mappingsConfig = idbmmsClient.getMappingsConfig(regionAwareInternalCrnGeneratorFactory.iam().getInternalCrnForServiceAsString(), environmentCrn, Optional.empty());
validateMappingsConfig(mappingsConfig, stackRequest);
} catch (IdbmmsOperationException e) {
throw new BadRequestException(String.format("Unable to get mappings: %s", e.getMessage()), e);
}
AccountMappingBase accountMapping = new AccountMappingBase();
accountMapping.setGroupMappings(mappingsConfig.getGroupMappings());
accountMapping.setUserMappings(mappingsConfig.getActorMappings());
cloudStorage.setAccountMapping(accountMapping);
LOGGER.info("Initial account mappings fetched from IDBMMS: {}", JsonUtil.writeValueAsStringSilent(accountMapping));
} else {
LOGGER.info("IDBMMS usage is disabled for environment {}. Proceeding with {} mappings for stack {}.", environmentCrn, mappingSource == IdBrokerMappingSource.MOCK && (CloudPlatform.AWS.name().equals(cloudPlatform) || CloudPlatform.AZURE.name().equals(cloudPlatform) || CloudPlatform.GCP.name().equals(cloudPlatform)) ? "mock" : "missing", stackName);
}
} else {
// getAccountMapping() != null is possible only in case of SdxInternalClusterRequest, in which case the user-given values will be honored.
LOGGER.info("{} for stack {} in environment {}.", cloudStorage == null ? "Cloud storage is disabled" : "Applying user-provided mappings", stackName, environmentCrn);
}
}
use of com.sequenceiq.cloudbreak.idbmms.model.MappingsConfig in project cloudbreak by hortonworks.
the class GrpcIdbmmsClient method getMappingsConfig.
/**
* Retrieves IDBroker mappings from IDBMMS for a particular environment.
*
* @param actorCrn the actor CRN; must not be {@code null}
* @param environmentCrn the environment CRN to get mappings for; must not be {@code null}
* @param requestId an optional request ID; must not be {@code null}
* @return the mappings config associated with environment {@code environmentCrn}; never {@code null}
* @throws NullPointerException if either argument is {@code null}
* @throws IdbmmsOperationException if any problem is encountered during the IDBMMS call processing
*/
public MappingsConfig getMappingsConfig(String actorCrn, String environmentCrn, Optional<String> requestId) {
checkNotNull(actorCrn, "actorCrn should not be null.");
checkNotNull(environmentCrn);
checkNotNull(requestId, "requestId should not be null.");
try (ManagedChannelWrapper channelWrapper = makeWrapper()) {
IdbmmsClient client = makeClient(channelWrapper.getChannel(), actorCrn);
String effectiveRequestId = requestId.orElse(UUID.randomUUID().toString());
LOGGER.debug("Fetching IDBroker mappings for environment {} using request ID {}", environmentCrn, effectiveRequestId);
MappingsConfig mappingsConfig = client.getMappingsConfig(effectiveRequestId, environmentCrn);
LOGGER.debug("Retrieved IDBroker mappings of version {} for environment {}", mappingsConfig.getMappingsVersion(), environmentCrn);
return mappingsConfig;
} catch (RuntimeException e) {
throw new IdbmmsOperationException(String.format("Error during IDBMMS operation: %s", e.getMessage()), e);
}
}
Aggregations