package software.amazon.imagebuilder.imagepipeline; import software.amazon.awssdk.services.imagebuilder.model.CreateImagePipelineResponse; import software.amazon.awssdk.services.imagebuilder.model.InvalidParameterException; import software.amazon.awssdk.services.imagebuilder.model.ResourceAlreadyExistsException; import software.amazon.cloudformation.exceptions.CfnAlreadyExistsException; import software.amazon.cloudformation.exceptions.CfnInvalidRequestException; import software.amazon.cloudformation.proxy.AmazonWebServicesClientProxy; import software.amazon.cloudformation.proxy.Logger; import software.amazon.cloudformation.proxy.ProgressEvent; import software.amazon.cloudformation.proxy.OperationStatus; import software.amazon.cloudformation.proxy.ResourceHandlerRequest; import java.util.Objects; public class CreateHandler extends BaseHandler { private AmazonWebServicesClientProxy clientProxy; private Logger logger; @Override public ProgressEvent handleRequest( final AmazonWebServicesClientProxy proxy, final ResourceHandlerRequest request, final CallbackContext callbackContext, final Logger logger) { this.clientProxy = proxy; this.logger = logger; final ResourceModel model = request.getDesiredResourceState(); CreateImagePipelineResponse response; try { response = proxy.injectCredentialsAndInvokeV2(RequestUtil.generateCreateImagePipelineRequest(model), ClientBuilder.getImageBuilderClient()::createImagePipeline); } catch (final ResourceAlreadyExistsException e) { logger.log(e.getMessage()); throw new CfnAlreadyExistsException(ResourceModel.TYPE_NAME, "ImagePipelineArn"); } catch (final InvalidParameterException e) { logger.log(e.getMessage()); throw new CfnInvalidRequestException(ResourceModel.TYPE_NAME); } model.setArn(response.imagePipelineArn()); return ProgressEvent.builder() .resourceModel(model) .status(OperationStatus.SUCCESS) .build(); } }