private ProgressEvent stabilizeImageCreation()

in image/src/main/java/software/amazon/imagebuilder/image/CreateHandler.java [71:112]


    private ProgressEvent<ResourceModel, CallbackContext> stabilizeImageCreation(
            final AmazonWebServicesClientProxy proxy,
            final CallbackContext callbackContext,
            final ResourceHandlerRequest<ResourceModel> request) {
        ResourceModel model = request.getDesiredResourceState();

        // read to ensure resource exists, and check the status
        try {
            Image image = proxy.injectCredentialsAndInvokeV2(RequestUtil.generateGetImageRequest(model),
                    ClientBuilder.getImageBuilderClient()::getImage).image();
            ImageStatus imageStatus = image.state().status();

            // Check the general image status, it will also cover the distribution AMI status
            if (imageStatus.name().equals(ImageStatus.AVAILABLE.name())) {
                List<Ami> amis = image.outputResources().amis();
                String currentRegion = request.getRegion();
                for (Ami ami : amis) {
                    if (ami.region().equals(currentRegion)) {
                        // Return the Image Id in Current Region
                        model.setImageId(ami.image());
                    }
                }
                return ProgressEvent.defaultSuccessHandler(model);
            } else if (imageStatus.name().equals(ImageStatus.CANCELLED.name())) {
                return ProgressEvent.defaultFailureHandler(
                        new CfnGeneralServiceException("Image creation is cancelled."),
                        HandlerErrorCode.GeneralServiceException);
            } else if (imageStatus.name().equals(ImageStatus.FAILED.name())) {
                return ProgressEvent.defaultFailureHandler(
                        new CfnGeneralServiceException(image.state().reason()),
                        HandlerErrorCode.GeneralServiceException);
            } else {
                return ProgressEvent.defaultInProgressHandler(
                        callbackContext,
                        10,
                        model);
            }
        } catch (final ResourceNotFoundException e) {
            return ProgressEvent.defaultFailureHandler(new CfnNotFoundException(ResourceModel.TYPE_NAME, e.toString()),
                    HandlerErrorCode.GeneralServiceException);
        }
    }