package com.amazonaws.iot.provisioningtemplate; import software.amazon.awssdk.awscore.exception.AwsServiceException; import software.amazon.awssdk.core.exception.SdkClientException; import software.amazon.awssdk.services.iot.IotClient; import software.amazon.awssdk.services.iot.model.DeleteConflictException; import software.amazon.awssdk.services.iot.model.DeleteProvisioningTemplateRequest; import software.amazon.awssdk.services.iot.model.InternalFailureException; import software.amazon.awssdk.services.iot.model.InvalidRequestException; import software.amazon.awssdk.services.iot.model.IotException; import software.amazon.awssdk.services.iot.model.ResourceNotFoundException; import software.amazon.awssdk.services.iot.model.ThrottlingException; import software.amazon.awssdk.services.iot.model.UnauthorizedException; import software.amazon.cloudformation.exceptions.CfnAccessDeniedException; import software.amazon.cloudformation.exceptions.CfnInvalidRequestException; import software.amazon.cloudformation.exceptions.CfnNotFoundException; import software.amazon.cloudformation.exceptions.CfnResourceConflictException; import software.amazon.cloudformation.exceptions.CfnServiceInternalErrorException; import software.amazon.cloudformation.exceptions.CfnServiceLimitExceededException; import software.amazon.cloudformation.exceptions.CfnThrottlingException; 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 DeleteHandler extends BaseHandler { private static final String OPERATION = "DeleteProvisioningTemplate"; private IotClient iotClient; public DeleteHandler() { iotClient = ClientBuilder.getClient(); } public DeleteHandler(IotClient iotClient) { this.iotClient = iotClient; } @Override public ProgressEvent handleRequest( final AmazonWebServicesClientProxy proxy, final ResourceHandlerRequest request, final CallbackContext callbackContext, final Logger logger) { final ResourceModel model = request.getDesiredResourceState(); final String templateName = model.getTemplateName(); final DeleteProvisioningTemplateRequest templateRequest = DeleteProvisioningTemplateRequest.builder() .templateName(templateName) .build(); try { proxy.injectCredentialsAndInvokeV2(templateRequest, iotClient::deleteProvisioningTemplate); logger.log(String.format("%s [%s] deleted successfully", ResourceModel.TYPE_NAME, templateName)); } catch (final InternalFailureException e) { throw new CfnServiceInternalErrorException(OPERATION, e); } catch (final InvalidRequestException e) { throw new CfnInvalidRequestException(e.getMessage(), e); } catch (final DeleteConflictException e) { throw new CfnResourceConflictException(ResourceModel.TYPE_NAME, templateName, e.getMessage()); } catch (final ThrottlingException e) { throw new CfnThrottlingException(OPERATION, e); } catch (final UnauthorizedException e) { throw new CfnAccessDeniedException(OPERATION, e); } catch (final ResourceNotFoundException e) { // Don't error on missing resources, just allow the default success to return } return ProgressEvent.defaultSuccessHandler(model); } }