in aws-rds-dbinstance/src/main/java/software/amazon/rds/dbinstance/CreateHandler.java [37:94]
protected ProgressEvent<ResourceModel, CallbackContext> handleRequest(
final AmazonWebServicesClientProxy proxy,
final ResourceHandlerRequest<ResourceModel> request,
final CallbackContext callbackContext,
final ProxyClient<RdsClient> rdsProxyClient,
final ProxyClient<Ec2Client> ec2ProxyClient,
final Logger logger
) {
final ResourceModel model = request.getDesiredResourceState();
final Collection<DBInstanceRole> desiredRoles = model.getAssociatedRoles();
if (BooleanUtils.isTrue(request.getSnapshotRequested()) && StringUtils.hasValue(model.getDBClusterIdentifier())) {
return ProgressEvent.failed(model, callbackContext, HandlerErrorCode.InvalidRequest, ILLEGAL_DELETION_POLICY_ERR);
}
if (StringUtils.isNullOrEmpty(model.getDBInstanceIdentifier())) {
model.setDBInstanceIdentifier(generateResourceIdentifier(
Optional.ofNullable(request.getStackId()).orElse(STACK_NAME),
Optional.ofNullable(request.getLogicalResourceIdentifier()).orElse(RESOURCE_IDENTIFIER),
request.getClientRequestToken(),
RESOURCE_ID_MAX_LENGTH
).toLowerCase());
}
final Map<String, String> tags = mergeMaps(Arrays.asList(
request.getSystemTags(),
request.getDesiredResourceTags()
));
model.setTags(Translator.translateTagsFromRequest(tags));
return ProgressEvent.progress(model, callbackContext)
.then(progress -> Commons.execOnce(progress, () -> {
if (isReadReplica(progress.getResourceModel())) {
return createDbInstanceReadReplica(proxy, rdsProxyClient, progress);
} else if (isRestoreFromSnapshot(progress.getResourceModel())) {
return restoreDbInstanceFromSnapshot(proxy, rdsProxyClient, progress);
}
return createDbInstance(proxy, rdsProxyClient, progress);
}, CallbackContext::isCreated, CallbackContext::setCreated))
.then(progress -> ensureEngineSet(rdsProxyClient, progress))
.then(progress -> {
if (shouldUpdateAfterCreate(progress.getResourceModel())) {
return Commons.execOnce(progress, () ->
updateDbInstanceAfterCreate(proxy, rdsProxyClient, progress, request.getDesiredResourceState()),
CallbackContext::isUpdated, CallbackContext::setUpdated)
.then(p -> Commons.execOnce(p, () -> {
if (shouldReboot(p.getResourceModel())) {
return rebootAwait(proxy, rdsProxyClient, p);
}
return p;
}, CallbackContext::isRebooted, CallbackContext::setRebooted));
}
return progress;
})
.then(progress -> Commons.execOnce(progress, () ->
updateAssociatedRoles(proxy, rdsProxyClient, progress, Collections.emptyList(), desiredRoles),
CallbackContext::isUpdatedRoles, CallbackContext::setUpdatedRoles))
.then(progress -> new ReadHandler().handleRequest(proxy, request, progress.getCallbackContext(), rdsProxyClient, ec2ProxyClient, logger));
}