in aws-ssm-patchbaseline/src/main/java/software/amazon/ssm/patchbaseline/TagHelper.java [108:163]
public void updateTagsForResource(final ResourceHandlerRequest<ResourceModel> request,
String ssmResourceType,
SsmClient ssmClient,
final AmazonWebServicesClientProxy proxy) {
if (request.getDesiredResourceState() == null) {
return ;
}
// model is not null
ResourceModel model = request.getDesiredResourceState();
String baselineId = model.getId();
List<Tag> newTags = validateAndMergeTagsForCreate(request, request.getDesiredResourceState().getTags());
ListTagsForResourceRequest listTagsForResourceRequest = ListTagsForResourceRequest.builder()
.resourceType(ssmResourceType)
.resourceId(baselineId)
.build();
ListTagsForResourceResponse listTagsForResourceResponse =
proxy.injectCredentialsAndInvokeV2(listTagsForResourceRequest, ssmClient::listTagsForResource);
List<Tag> oldTags = listTagsForResourceResponse.tagList();
Map<String, String> newTagsMap = convertRequestTagsToMap(newTags);
Map<String, String> oldTagsMap = convertRequestTagsToMap(oldTags);
// request.getSystemTag() is null,
// remove systemTags from listTagsForResourceResponse
oldTagsMap.keySet().removeIf(key -> key.toLowerCase().startsWith(SYSTEM_TAG_PREFIX));
Map<String, String> tagsToRemove = TagUtils.getTagsToDelete(newTagsMap, oldTagsMap);
Map<String, String> tagsToAdd = TagUtils.getTagsToCreate(newTagsMap, oldTagsMap);
List<String> ssmKeysToRemove = new ArrayList<>(tagsToRemove.keySet());
List<Tag> ssmTagsToAdd = convertToTagList(tagsToAdd);
if (!ssmKeysToRemove.isEmpty()) {
RemoveTagsFromResourceRequest removeTagsRequest = RemoveTagsFromResourceRequest.builder()
.resourceType(ssmResourceType)
.resourceId(baselineId)
.tagKeys(ssmKeysToRemove)
.build();
RemoveTagsFromResourceResponse removeTagsFromResourceResponse =
proxy.injectCredentialsAndInvokeV2(removeTagsRequest, ssmClient::removeTagsFromResource);
}
if (!ssmTagsToAdd.isEmpty()) {
AddTagsToResourceRequest addTagsRequest = AddTagsToResourceRequest.builder()
.resourceType(ssmResourceType)
.resourceId(baselineId)
.tags(ssmTagsToAdd)
.build();
AddTagsToResourceResponse addTagsToResourceResponse =
proxy.injectCredentialsAndInvokeV2(addTagsRequest, ssmClient::addTagsToResource);
}
}