in aws-emrcontainers-virtualcluster/src/main/java/software/amazon/emrcontainers/virtualcluster/UpdateHandler.java [42:90]
private ResourceModel update(ResourceModel model, ResourceHandlerRequest<ResourceModel> request) {
DescribeVirtualClusterRequest describeVirtualClusterRequest = new DescribeVirtualClusterRequest();
describeVirtualClusterRequest.setId(model.getId());
DescribeVirtualClusterResult describeVirtualClusterResult;
VirtualCluster virtualCluster;
try {
describeVirtualClusterResult =
clientProxy.injectCredentialsAndInvoke(describeVirtualClusterRequest, emrContainersClient::describeVirtualCluster);
virtualCluster = describeVirtualClusterResult.getVirtualCluster();
if (virtualCluster.getState().equals(VirtualClusterState.TERMINATED.toString())) {
throw new CfnNotFoundException(ResourceModel.TYPE_NAME, model.getId());
}
} catch(com.amazonaws.services.emrcontainers.model.ResourceNotFoundException e) {
throw new CfnNotFoundException(ResourceModel.TYPE_NAME, model.getId());
} catch (InternalServerException e) {
throw new CfnGeneralServiceException("describeVirtualCluster", e);
} catch (AmazonEMRContainersException e) {
throw new CfnInvalidRequestException(e.getMessage(), e);
}
String arn = virtualCluster.getArn();
final Set<Tag> existingTags = Translator.toTagSet(describeVirtualClusterResult.getVirtualCluster().getTags());
final Set<Tag> latestTags = Translator.toTagSet(request.getDesiredResourceTags());
final Set<Tag> tagsToRemove = new HashSet<>(existingTags);
tagsToRemove.removeIf(latestTags::contains);
final Set<Tag> tagsToAdd = new HashSet<>(latestTags);
tagsToAdd.removeIf(existingTags::contains);
if (tagsToRemove.size() > 0) {
UntagResourceRequest untagResourceRequest = new UntagResourceRequest();
untagResourceRequest.setResourceArn(arn);
untagResourceRequest.setTagKeys(getFilteredTagKeys(tagsToRemove));
clientProxy.injectCredentialsAndInvoke(untagResourceRequest, emrContainersClient::untagResource);
}
if (tagsToAdd.size() > 0) {
TagResourceRequest tagResourceRequest = new TagResourceRequest();
tagResourceRequest.setResourceArn(arn);
tagResourceRequest.setTags(Translator.toTagMap(tagsToAdd));
clientProxy.injectCredentialsAndInvoke(tagResourceRequest, emrContainersClient::tagResource);
}
model.setArn(arn);
model.setName(virtualCluster.getName());
return model;
}