in aws-sagemaker-image/src/main/java/software/amazon/sagemaker/image/UpdateHandler.java [166:195]
private void handleTagging(
final ProxyClient<SageMakerClient> proxyClient,
final ResourceModel model) {
final Set<software.amazon.awssdk.services.sagemaker.model.Tag> newTags =
new HashSet<>(Translator.cfnTagsToSdkTags(model.getTags()));
final Set<software.amazon.awssdk.services.sagemaker.model.Tag> existingTags =
new HashSet<>(proxyClient.injectCredentialsAndInvokeV2(
Translator.translateToListTagsRequest(model), proxyClient.client()::listTags).tags());
final String imageArn = proxyClient.injectCredentialsAndInvokeV2(
Translator.translateToReadRequest(model), proxyClient.client()::describeImage).imageArn();
final List<software.amazon.awssdk.services.sagemaker.model.Tag> tagsToAdd = newTags.stream()
.filter(tag -> !existingTags.contains(tag))
.collect(Collectors.toList());
final List<String> tagsToAddKeys = tagsToAdd.stream()
.map(software.amazon.awssdk.services.sagemaker.model.Tag::key)
.collect(Collectors.toList());
final List<String> tagsToRemove = existingTags.stream()
.filter(tag -> !newTags.contains(tag) && !tagsToAddKeys.contains(tag.key()))
.map(software.amazon.awssdk.services.sagemaker.model.Tag::key)
.collect(Collectors.toList());
if (!tagsToRemove.isEmpty()) {
proxyClient.injectCredentialsAndInvokeV2(Translator.translateToDeleteTagsRequest(tagsToRemove, imageArn),
proxyClient.client()::deleteTags);
}
if (!tagsToAdd.isEmpty()) {
proxyClient.injectCredentialsAndInvokeV2(Translator.translateToAddTagsRequest(tagsToAdd, imageArn),
proxyClient.client()::addTags);
}
}