package software.amazon.datasync.task; import software.amazon.awssdk.services.datasync.DataSyncClient; import software.amazon.awssdk.services.datasync.model.DataSyncException; import software.amazon.awssdk.services.datasync.model.DescribeTaskRequest; import software.amazon.awssdk.services.datasync.model.DescribeTaskResponse; import software.amazon.awssdk.services.datasync.model.InternalException; import software.amazon.awssdk.services.datasync.model.InvalidRequestException; import software.amazon.awssdk.services.datasync.model.UpdateTaskRequest; import software.amazon.cloudformation.exceptions.CfnNotFoundException; import software.amazon.cloudformation.exceptions.CfnServiceInternalErrorException; import software.amazon.cloudformation.proxy.AmazonWebServicesClientProxy; import software.amazon.cloudformation.proxy.Logger; import software.amazon.cloudformation.proxy.ProgressEvent; import software.amazon.cloudformation.proxy.ResourceHandlerRequest; public class UpdateHandler extends BaseHandler { @Override public ProgressEvent handleRequest( final AmazonWebServicesClientProxy proxy, final ResourceHandlerRequest request, final CallbackContext callbackContext, final Logger logger) { final ResourceModel model = request.getDesiredResourceState(); final DataSyncClient client = ClientBuilder.getClient(); UpdateTaskRequest updateTaskRequest = Translator.translateToUpdateRequest(model); try { proxy.injectCredentialsAndInvokeV2(updateTaskRequest, client::updateTask); logger.log(String.format("%s %s updated successfully.", ResourceModel.TYPE_NAME, model.getTaskArn())); } catch (InvalidRequestException e) { throw new CfnNotFoundException(ResourceModel.TYPE_NAME, model.getTaskArn()); } catch (InternalException e) { throw new CfnServiceInternalErrorException(e.getMessage(), e.getCause()); } catch (DataSyncException e) { throw Translator.translateDataSyncExceptionToCfnException(e); } // Tags are not handled by the Update call and must be updated separately TagRequestMaker.updateTagsForResource(proxy, client, model.getTaskArn(), request, logger); return new ReadHandler().handleRequest(proxy, request, callbackContext, logger); } }