code: func (t *awsTagging) readRepairClusterTags(client EC2, resourceID string, lifecycle ResourceLifecycle, additionalTags map[string]string, observedTags []*ec2.Tag) error {
  	actualTagMap := make(map[string]string)
  	for _, tag := range observedTags {
  		actualTagMap[aws.StringValue(tag.Key)] = aws.StringValue(tag.Value)
  	}
  
  	expectedTags := t.buildTags(lifecycle, additionalTags)
  
  	addTags := make(map[string]string)
  	for k, expected := range expectedTags {
  		actual := actualTagMap[k]
  		if actual == expected {
  			continue
  		}
  		if actual == "" {
  			klog.Warningf("Resource %q was missing expected cluster tag %q.  Will add (with value %q)", resourceID, k, expected)
  			addTags[k] = expected
  		} else {
  			return fmt.Errorf("resource %q has tag belonging to another cluster: %q=%q (expected %q)", resourceID, k, actual, expected)
  		}
  	}
  
  	if len(addTags) == 0 {
  		return nil
  	}
  
  	if err := t.createTags(client, resourceID, lifecycle, addTags); err != nil {
  		return fmt.Errorf("error adding missing tags to resource %q: %q", resourceID, err)
  	}
  
  	return nil
  }
docs: // Ensure that a resource has the correct tags
  // If it has no tags, we assume that this was a problem caused by an error in between creation and tagging,
  // and we add the tags.  If it has a different cluster's tags, that is an error.