in aws-iot-domainconfiguration/src/main/java/com/amazonaws/iot/domainconfiguration/CreateHandler.java [70:139]
public ProgressEvent<ResourceModel, CallbackContext> handleRequest(
final AmazonWebServicesClientProxy proxy,
final ResourceHandlerRequest<ResourceModel> request,
final CallbackContext callbackContext,
final Logger logger) {
final ResourceModel model = request.getDesiredResourceState();
final String domainConfigName = getDomainConfigurationName(model, request);
model.setDomainConfigurationName(domainConfigName);
if (callbackContext != null && callbackContext.isCreateOrUpdateInProgress()) {
int currentRetryCount = callbackContext.getRetryCount();
try {
final ProgressEvent<ResourceModel, CallbackContext> readResponse = (new ReadHandler(iotClient))
.handleRequest(proxy, request, CallbackContext.builder().build(), logger);
logger.log(String.format("%s [%s] created successfully", ResourceModel.TYPE_NAME, domainConfigName));
return readResponse;
} catch (final CfnNotFoundException e) {
if(currentRetryCount >= ResourceUtil.MAX_RETRIES)
throw new CfnResourceConflictException(model.getDomainName(), model.getArn(),
"Unable to create the resource", e);
else
return ProgressEvent.defaultInProgressHandler(
CallbackContext.builder().createOrUpdateInProgress(true).retryCount(currentRetryCount + 1).build(),
ResourceUtil.DELAY_CONSTANT, model);
}
}
final CreateDomainConfigurationRequest domainRequest = CreateDomainConfigurationRequest.builder()
.domainConfigurationName(domainConfigName)
.domainName(model.getDomainName())
.authorizerConfig(ResourceUtil.getSdkAuthorizerConfig(model))
.serverCertificateArns(model.getServerCertificateArns())
.serviceType(model.getServiceType())
.tags(getTags(model))
.validationCertificateArn(model.getValidationCertificateArn())
.build();
try {
CreateDomainConfigurationResponse response = proxy.injectCredentialsAndInvokeV2(domainRequest,
iotClient::createDomainConfiguration);
logger.log(String.format("%s [%s] created. Waiting for %d seconds before returning success",
ResourceModel.TYPE_NAME, domainConfigName, ResourceUtil.DELAY_CONSTANT));
// Since we have a property that only shows up in updates, we need to handle it in create as well as
// there is no support for updateOnlyProperties.
if (model.getDomainConfigurationStatus() != null) {
UpdateDomainConfigurationRequest updateRequest = UpdateDomainConfigurationRequest.builder()
.domainConfigurationName(domainConfigName)
.domainConfigurationStatus(model.getDomainConfigurationStatus())
.build();
proxy.injectCredentialsAndInvokeV2(updateRequest, iotClient::updateDomainConfiguration);
logger.log(String.format("%s [%s] updated during creation with status [%s]",
ResourceModel.TYPE_NAME,
domainConfigName,
model.getDomainConfigurationStatus()));
}
return ProgressEvent.defaultInProgressHandler(
CallbackContext.builder().createOrUpdateInProgress(true).retryCount(1).build(),
ResourceUtil.DELAY_CONSTANT,
ResourceModel.builder().
domainConfigurationName(response.domainConfigurationName())
.arn(response.domainConfigurationArn())
.build());
} catch (IotException e) {
throw ExceptionTranslator.translateIotExceptionToHandlerException(e, OPERATION, domainConfigName);
}
}