|
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