11package sumologic
22
33import (
4- "errors"
54 "fmt"
65 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
76 "log"
7+ "strings"
88)
99
1010func resourceSumologicOTCollector () * schema.Resource {
@@ -78,6 +78,9 @@ func resourceSumologicOTCollector() *schema.Resource {
7878 Type : schema .TypeString ,
7979 },
8080 Optional : true ,
81+ DiffSuppressFunc : func (k , old , new string , d * schema.ResourceData ) bool {
82+ return strings .HasPrefix (strings .ToLower (k ), "tags.sumo.disco" )
83+ },
8184 },
8285 },
8386 }
@@ -98,7 +101,7 @@ func resourceSumologicOTCollectorRead(d *schema.ResourceData, meta interface{})
98101 return nil
99102 }
100103
101- if err := d .Set ("tags" , otCollector .Tags ); err != nil {
104+ if err := d .Set ("tags" , filterUpdatableTags ( otCollector .Tags ) ); err != nil {
102105 return fmt .Errorf ("error setting fields for resource %s: %s" , d .Id (), err )
103106 }
104107
@@ -124,7 +127,49 @@ func resourceSumologicOTCollectorDelete(d *schema.ResourceData, meta interface{}
124127}
125128
126129func resourceSumologicOTCollectorUpdate (d * schema.ResourceData , meta interface {}) error {
127- return errors .New ("Terraform does not support OTel collector updates" )
130+ c := meta .(* Client )
131+ id := d .Id ()
132+ req := make (map [string ]interface {})
133+ if d .HasChange ("time_zone" ) {
134+ req ["timezone" ] = d .Get ("time_zone" )
135+ }
136+
137+ if d .HasChange ("name" ) {
138+ req ["name" ] = d .Get ("name" )
139+ }
140+
141+ if d .HasChange ("tags" ) {
142+ newTags := d .Get ("tags" ).(map [string ]interface {})
143+ filtered := filterUpdatableTags (newTags )
144+
145+ if len (filtered ) > 0 {
146+ req ["tags" ] = filtered
147+ }
148+ }
149+
150+ if len (req ) == 0 {
151+ return resourceSumologicOTCollectorRead (d , meta )
152+ }
153+ if err := c .UpdateOTCollector (id , req ); err != nil {
154+ return fmt .Errorf ("failed to update OTel collector %s: %w" , id , err )
155+ }
156+
157+ return resourceSumologicOTCollectorRead (d , meta )
158+ }
159+
160+ func filterUpdatableTags (tags map [string ]interface {}) map [string ]interface {} {
161+ if tags == nil {
162+ return nil
163+ }
164+
165+ updatable := make (map [string ]interface {})
166+ for k , v := range tags {
167+ if strings .HasPrefix (k , "sumo.disco" ) {
168+ continue
169+ }
170+ updatable [k ] = v
171+ }
172+ return updatable
128173}
129174
130175func resourceToOTCollector (d * schema.ResourceData ) OTCollector {
@@ -142,6 +187,6 @@ func resourceToOTCollector(d *schema.ResourceData) OTCollector {
142187 TimeZone : d .Get ("time_zone" ).(string ),
143188 ID : d .Id (),
144189 Name : d .Get ("name" ).(string ),
145- Tags : d .Get ("fields " ).(map [string ]interface {}),
190+ Tags : d .Get ("tags " ).(map [string ]interface {}),
146191 }
147192}
0 commit comments