delete the tags defined from inherit that are not in the labels anymore

This commit is contained in:
tcondeixa
2026-06-29 17:42:30 +02:00
parent 0fe4eaac6b
commit 3cf121b72d
5 changed files with 63 additions and 14 deletions
+30 -10
View File
@@ -532,19 +532,25 @@ func (c *Cluster) tagEBSVolumes() error {
desiredTags[labelKey] = labelValue
}
if len(desiredTags) == 0 {
c.logger.Debugf("no tags to apply from configured labels")
return nil
}
volumesToTag := make([]string, 0, len(c.EBSVolumes))
volumesToUntag := make([]string, 0, len(c.EBSVolumes))
staleKeys := make(map[string]bool)
for volumeID, volumeProps := range c.EBSVolumes {
if c.tagsNeedUpdate(volumeProps.Tags, desiredTags) {
if len(desiredTags) > 0 && c.tagsNeedUpdate(volumeProps.Tags, desiredTags) {
volumesToTag = append(volumesToTag, volumeID)
}
for _, labelKey := range c.OpConfig.EBSTagsInheritLabels {
if _, wanted := desiredTags[labelKey]; !wanted {
if _, exists := volumeProps.Tags[labelKey]; exists {
volumesToUntag = append(volumesToUntag, volumeID)
staleKeys[labelKey] = true
}
}
}
}
if len(volumesToTag) == 0 {
if len(volumesToTag) == 0 && len(volumesToUntag) == 0 {
c.logger.Debugf("all EBS volumes already have the desired tags")
return nil
}
@@ -560,11 +566,25 @@ func (c *Cluster) tagEBSVolumes() error {
}()
}
if err := c.VolumeResizer.TagVolumes(volumesToTag, desiredTags); err != nil {
return fmt.Errorf("could not tag EBS volumes: %v", err)
if len(volumesToTag) > 0 {
if err := c.VolumeResizer.TagVolumes(volumesToTag, desiredTags); err != nil {
return fmt.Errorf("could not tag EBS volumes: %v", err)
}
c.logger.Infof("successfully tagged %d EBS volumes with labels: %v", len(volumesToTag), desiredTags)
}
if len(volumesToUntag) > 0 {
keysToDelete := make([]string, 0, len(staleKeys))
for k := range staleKeys {
keysToDelete = append(keysToDelete, k)
}
if err := c.VolumeResizer.UntagVolumes(volumesToUntag, keysToDelete); err != nil {
c.logger.Warningf("could not remove stale EBS tags %v: %v", keysToDelete, err)
} else {
c.logger.Infof("removed stale tags %v from %d EBS volumes", keysToDelete, len(volumesToUntag))
}
}
c.logger.Infof("successfully tagged %d EBS volumes with labels: %v", len(volumesToTag), desiredTags)
return nil
}
+28
View File
@@ -241,6 +241,34 @@ func (r *EBSVolumeResizer) TagVolumes(volumeIds []string, tags map[string]string
return nil
}
// UntagVolumes removes the given tag keys from the provided EBS volumes.
func (r *EBSVolumeResizer) UntagVolumes(volumeIds []string, tagKeys []string) error {
if !r.IsConnectedToProvider() {
if err := r.ConnectToProvider(); err != nil {
return err
}
}
if len(volumeIds) == 0 || len(tagKeys) == 0 {
return nil
}
ec2Tags := make([]types.Tag, 0, len(tagKeys))
for _, key := range tagKeys {
k := key
ec2Tags = append(ec2Tags, types.Tag{Key: &k})
}
_, err := r.connection.DeleteTags(context.TODO(), &ec2.DeleteTagsInput{
Resources: volumeIds,
Tags: ec2Tags,
})
if err != nil {
return fmt.Errorf("could not untag EBS volumes: %v", err)
}
return nil
}
// DisconnectFromProvider closes connection to the EC2 instance
func (r *EBSVolumeResizer) DisconnectFromProvider() error {
r.connection = nil
+1
View File
@@ -26,4 +26,5 @@ type VolumeResizer interface {
DisconnectFromProvider() error
DescribeVolumes(providerVolumesID []string) ([]VolumeProperties, error)
TagVolumes(providerVolumesID []string, tags map[string]string) error
UntagVolumes(providerVolumesID []string, tagKeys []string) error
}