package software.amazon.rds.dbcluster; import software.amazon.awssdk.services.ec2.Ec2Client; import software.amazon.awssdk.services.rds.RdsClient; import software.amazon.awssdk.services.rds.model.DBCluster; import software.amazon.cloudformation.proxy.AmazonWebServicesClientProxy; import software.amazon.cloudformation.proxy.ProgressEvent; import software.amazon.cloudformation.proxy.ProxyClient; import software.amazon.rds.common.handler.Commons; import software.amazon.rds.common.handler.HandlerConfig; import software.amazon.rds.common.logging.RequestLogger; import software.amazon.rds.common.request.ValidatedRequest; public class ReadHandler extends BaseHandlerStd { public ReadHandler() { this(HandlerConfig.builder().build()); } public ReadHandler(final HandlerConfig config) { super(config); } @Override protected ProgressEvent handleRequest( final AmazonWebServicesClientProxy proxy, final ValidatedRequest request, final CallbackContext callbackContext, final ProxyClient rdsProxyClient, final ProxyClient ec2ProxyClient, final RequestLogger logger ) { return proxy.initiate("rds::describe-db-cluster", rdsProxyClient, request.getDesiredResourceState(), callbackContext) .translateToServiceRequest(Translator::describeDbClustersRequest) .backoffDelay(config.getBackoff()) .makeServiceCall((describeRequest, proxyInvocation) -> proxyInvocation.injectCredentialsAndInvokeV2( describeRequest, proxyInvocation.client()::describeDBClusters )) .handleError((describeRequest, exception, client, model, context) -> Commons.handleException( ProgressEvent.progress(model, context), exception, DEFAULT_DB_CLUSTER_ERROR_RULE_SET )) .done((describeRequest, describeResponse, proxyInvocation, model, context) -> { final DBCluster dbCluster = describeResponse.dbClusters().get(0); return ProgressEvent.success(Translator.translateDbClusterFromSdk(dbCluster), context); }); } }