public void updateTagsForResource()

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