| 
1 | 1 | package sysdig  | 
2 | 2 | 
 
  | 
3 | 3 | import (  | 
 | 4 | +	"reflect"  | 
 | 5 | +	"sort"  | 
 | 6 | + | 
4 | 7 | 	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"  | 
5 | 8 | 
 
  | 
6 | 9 | 	"github.com/draios/terraform-provider-sysdig/sysdig/internal/client/secure"  | 
@@ -46,22 +49,37 @@ func ruleFromResourceData(d *schema.ResourceData) secure.Rule {  | 
46 | 49 | 		Version:     d.Get("version").(int),  | 
47 | 50 | 	}  | 
48 | 51 | 
 
  | 
49 |  | -	rule.Tags = []string{}  | 
50 |  | -	if tags, ok := d.Get("tags").([]interface{}); ok {  | 
51 |  | -		for _, rawTag := range tags {  | 
52 |  | -			if tag, ok := rawTag.(string); ok {  | 
53 |  | -				rule.Tags = append(rule.Tags, tag)  | 
54 |  | -			}  | 
55 |  | -		}  | 
56 |  | -	}  | 
 | 52 | +	rule.Tags = getTagsFromResourceData(d)  | 
 | 53 | + | 
57 | 54 | 	return rule  | 
58 | 55 | }  | 
59 | 56 | 
 
  | 
60 | 57 | // Saves in the resource data the information from the common fields of the rule.  | 
61 | 58 | func updateResourceDataForRule(d *schema.ResourceData, rule secure.Rule) {  | 
 | 59 | +	currentTags := getTagsFromResourceData(d)  | 
 | 60 | +	newTags := append([]string{}, rule.Tags...)  | 
 | 61 | +	sort.Strings(currentTags)  | 
 | 62 | +	sort.Strings(newTags)  | 
 | 63 | +	areTagsSame := reflect.DeepEqual(currentTags, newTags)  | 
 | 64 | + | 
62 | 65 | 	_ = d.Set("name", rule.Name)  | 
63 | 66 | 	_ = d.Set("description", rule.Description)  | 
64 |  | -	_ = d.Set("tags", rule.Tags)  | 
 | 67 | +	if !areTagsSame {  | 
 | 68 | +		_ = d.Set("tags", rule.Tags)  | 
 | 69 | +	}  | 
65 | 70 | 	_ = d.Set("version", rule.Version)  | 
66 | 71 | 
 
  | 
67 | 72 | }  | 
 | 73 | + | 
 | 74 | +func getTagsFromResourceData(d *schema.ResourceData) []string {  | 
 | 75 | +	result := []string{}  | 
 | 76 | +	if tags, ok := d.Get("tags").([]interface{}); ok {  | 
 | 77 | +		for _, rawTag := range tags {  | 
 | 78 | +			if tag, ok := rawTag.(string); ok {  | 
 | 79 | +				result = append(result, tag)  | 
 | 80 | +			}  | 
 | 81 | +		}  | 
 | 82 | +	}  | 
 | 83 | + | 
 | 84 | +	return result  | 
 | 85 | +}  | 
0 commit comments