in aws-rds-dbinstance/src/main/java/software/amazon/rds/dbinstance/UpdateHandler.java [46:116]
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
) {
if (!ImmutabilityHelper.isChangeMutable(request.getPreviousResourceState(), request.getDesiredResourceState())) {
return ProgressEvent.failed(
request.getDesiredResourceState(),
callbackContext,
HandlerErrorCode.NotUpdatable,
"Resource is immutable"
);
}
final Collection<Tag> previousTags = Translator.translateTagsFromRequest(
Tagging.mergeTags(
request.getPreviousSystemTags(),
request.getPreviousResourceTags()
)
);
final Collection<Tag> desiredTags = Translator.translateTagsFromRequest(
Tagging.mergeTags(
request.getSystemTags(),
request.getDesiredResourceTags()
)
);
final Collection<DBInstanceRole> previousRoles = request.getPreviousResourceState().getAssociatedRoles();
final Collection<DBInstanceRole> desiredRoles = request.getDesiredResourceState().getAssociatedRoles();
return ProgressEvent.progress(request.getDesiredResourceState(), callbackContext)
.then(progress -> {
if (shouldSetParameterGroupName(request)) {
return setParameterGroupName(rdsProxyClient, progress);
}
return progress;
})
.then(progress -> {
if (shouldSetDefaultVpcId(request)) {
return setDefaultVpcId(rdsProxyClient, ec2ProxyClient, progress);
}
return progress;
})
.then(progress -> {
if (shouldUnsetMaxAllocatedStorage(request)) {
return unsetMaxAllocatedStorage(rdsProxyClient, request, progress);
}
return progress;
})
.then(progress -> ensureEngineSet(rdsProxyClient, progress))
.then(progress -> Commons.execOnce(progress, () ->
updateDbInstance(proxy, request, rdsProxyClient, progress),
CallbackContext::isUpdated, CallbackContext::setUpdated)
)
.then(progress -> Commons.execOnce(progress, () -> {
if (shouldReboot(rdsProxyClient, progress)) {
return rebootAwait(proxy, rdsProxyClient, progress);
}
return progress;
}, CallbackContext::isRebooted, CallbackContext::setRebooted)
)
.then(progress -> Commons.execOnce(progress, () ->
updateAssociatedRoles(proxy, rdsProxyClient, progress, previousRoles, desiredRoles),
CallbackContext::isUpdatedRoles, CallbackContext::setUpdatedRoles)
)
.then(progress -> updateTags(proxy, rdsProxyClient, progress, previousTags, desiredTags))
.then(progress -> new ReadHandler().handleRequest(proxy, request, callbackContext, rdsProxyClient, ec2ProxyClient, logger));
}