in key/src/main/java/software/amazon/kms/key/UpdateHandler.java [36:76]
protected ProgressEvent<ResourceModel, CallbackContext> handleRequest(
final AmazonWebServicesClientProxy proxy,
final ResourceHandlerRequest<ResourceModel> request,
final CallbackContext callbackContext,
final ProxyClient<KmsClient> proxyClient,
final Logger logger) {
final ResourceModel model = setDefaults(request.getDesiredResourceState());
final ResourceModel previousModel = setDefaults(request.getPreviousResourceState());
final Map<String, String> tags = request.getDesiredResourceTags();
return ProgressEvent.progress(model, callbackContext)
// Describe the key (without updating the model) to verify that it has not been deleted
.then(progress -> keyHandlerHelper
.describeKey(proxy, proxyClient, model, callbackContext, false))
.then(progress -> validateResourceModel(progress, previousModel, model))
.then(progress -> keyHandlerHelper
.enableKeyIfNecessary(proxy, proxyClient, previousModel, model, callbackContext,
true))
.then(progress -> updateKeyRotationStatus(proxy, proxyClient, previousModel, model,
callbackContext))
.then(progress -> keyHandlerHelper
.disableKeyIfNecessary(proxy, proxyClient, previousModel, model, callbackContext))
.then(progress -> keyHandlerHelper
.updateKeyDescription(proxy, proxyClient, previousModel, model, callbackContext))
.then(progress -> keyHandlerHelper
.updateKeyPolicy(proxy, proxyClient, previousModel, model, callbackContext))
.then(progress -> {
if (!Objects.equals(tags, request.getPreviousResourceTags())) {
// Customer is attempting to change tags, no soft fail
return keyHandlerHelper
.updateKeyTags(proxy, proxyClient, model, tags, callbackContext);
} else {
// Customer did not explicitly request a tag update, fixing the drift
return softFailAccessDenied(() -> keyHandlerHelper
.updateKeyTags(proxy, proxyClient, model, tags, callbackContext),
model, callbackContext);
}
})
.then(eventualConsistencyHandlerHelper::waitForChangesToPropagate)
.then(progress -> ProgressEvent.defaultSuccessHandler(unsetWriteOnly(model)));
}