Search in sources :

Example 1 with MappingsConfig

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);
    }
}
Also used : AccountMappingBase(com.sequenceiq.common.api.cloudstorage.AccountMappingBase) CloudStorageRequest(com.sequenceiq.common.api.cloudstorage.CloudStorageRequest) MappingsConfig(com.sequenceiq.cloudbreak.idbmms.model.MappingsConfig) IdbmmsOperationException(com.sequenceiq.cloudbreak.idbmms.exception.IdbmmsOperationException) BadRequestException(com.sequenceiq.cloudbreak.common.exception.BadRequestException) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 2 with MappingsConfig

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);
    }
}
Also used : MappingsConfig(com.sequenceiq.cloudbreak.idbmms.model.MappingsConfig) IdbmmsOperationException(com.sequenceiq.cloudbreak.idbmms.exception.IdbmmsOperationException) ManagedChannelWrapper(com.sequenceiq.cloudbreak.grpc.ManagedChannelWrapper)

Aggregations

IdbmmsOperationException (com.sequenceiq.cloudbreak.idbmms.exception.IdbmmsOperationException)2 MappingsConfig (com.sequenceiq.cloudbreak.idbmms.model.MappingsConfig)2 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 BadRequestException (com.sequenceiq.cloudbreak.common.exception.BadRequestException)1 ManagedChannelWrapper (com.sequenceiq.cloudbreak.grpc.ManagedChannelWrapper)1 AccountMappingBase (com.sequenceiq.common.api.cloudstorage.AccountMappingBase)1 CloudStorageRequest (com.sequenceiq.common.api.cloudstorage.CloudStorageRequest)1