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);
}
}