@@ -171,7 +171,7 @@ func resourceSumologicCSEMatchListCreate(d *schema.ResourceData, meta interface{
171171 })
172172
173173 if err != nil {
174- return err
174+ return fmt . Errorf ( "[ERROR] An error occurred converting resource to match list with id %s, err: %v" , d . Id (), err )
175175 }
176176 d .SetId (id )
177177
@@ -185,9 +185,8 @@ func resourceSumologicCSEMatchListCreate(d *schema.ResourceData, meta interface{
185185 if len (items ) > 0 {
186186 err = c .CreateCSEMatchListItems (items , id )
187187 if err != nil {
188- log . Printf ("[WARN ] An error occurred while adding match list items to match list id: %s, err: %v" , id , err )
188+ return fmt . Errorf ("[ERROR ] An error occurred while adding match list items to match list with id %s, err: %v" , id , err )
189189 }
190-
191190 }
192191
193192 createStateConf := & resource.StateChangeConf {
@@ -197,7 +196,7 @@ func resourceSumologicCSEMatchListCreate(d *schema.ResourceData, meta interface{
197196 Refresh : func () (interface {}, string , error ) {
198197 resp , err := c .GetCSEMatchListItemsInMatchList (d .Id ())
199198 if err != nil {
200- log .Printf ("[WARN ] CSE Match List items not found when looking by match list id: %s, err: %v" , d .Id (), err )
199+ log .Printf ("[ERROR ] CSE Match List items not found when looking by match list id %s, err: %v" , d .Id (), err )
201200 return 0 , "" , err
202201 }
203202 return resp , fmt .Sprint (resp .Total ), nil
@@ -210,7 +209,7 @@ func resourceSumologicCSEMatchListCreate(d *schema.ResourceData, meta interface{
210209
211210 _ , err = createStateConf .WaitForState ()
212211 if err != nil {
213- return fmt .Errorf ("error waiting for match list (%s) to be created: %s" , d .Id (), err )
212+ return fmt .Errorf ("[ERROR] error waiting for match list with id %s to be created: %s" , d .Id (), err )
214213 }
215214
216215 }
@@ -235,63 +234,88 @@ func resourceToCSEMatchListItem(data interface{}) CSEMatchListItemPost {
235234func resourceSumologicCSEMatchListUpdate (d * schema.ResourceData , meta interface {}) error {
236235 CSEMatchListPost , err := resourceToCSEMatchList (d )
237236 if err != nil {
238- return err
237+ return fmt . Errorf ( "[ERROR] An error occurred converting resource to match list with id %s, err: %v" , d . Id (), err )
239238 }
240239
241240 c := meta .(* Client )
242241 if err = c .UpdateCSEMatchList (CSEMatchListPost ); err != nil {
243- return err
242+ return fmt . Errorf ( "[ERROR] An error occurred updating match list with id %s, err: %v" , d . Id (), err )
244243 }
245244
246245 itemsData := d .Get ("items" ).(* schema.Set ).List ()
247246 var newItems []CSEMatchListItemPost
247+ var newItemIds []string
248248 for _ , data := range itemsData {
249249 item := resourceToCSEMatchListItem ([]interface {}{data })
250250 newItems = append (newItems , item )
251+ newItemIds = append (newItemIds , item .ID )
251252 }
252253
253254 CSEMatchListItems , err := c .GetCSEMatchListItemsInMatchList (d .Id ())
254255 if err != nil {
255- log . Printf ("[WARN ] CSE Match List items not found when looking by match list id: %s, err: %v" , d .Id (), err )
256+ return fmt . Errorf ("[ERROR ] CSE Match List items not found when looking by match list id %s, err: %v" , d .Id (), err )
256257 }
257- var oldItemIds []string
258+
259+ var deleteItemIds []string
260+ var updateItemIds []string
261+
262+ // Compare currently existing match list items with the new items to determine if they should be deleted or updated
258263 for _ , item := range CSEMatchListItems .CSEMatchListItemsGetObjects {
259- oldItemIds = append (oldItemIds , item .ID )
264+ var oldItemId = item .ID
265+ if contains (newItemIds , oldItemId ) {
266+ updateItemIds = append (updateItemIds , oldItemId )
267+ } else {
268+ deleteItemIds = append (deleteItemIds , oldItemId )
269+ }
270+ }
271+
272+ var updateItems []CSEMatchListItemPost
273+ var addItems []CSEMatchListItemPost
274+
275+ // Any new items that are not updates to existing items should be added instead
276+ for _ , newItem := range newItems {
277+ if contains (updateItemIds , newItem .ID ) {
278+ updateItems = append (updateItems , newItem )
279+ } else {
280+ addItems = append (addItems , newItem )
281+ }
260282 }
261283
262284 // Delete old items
263- for _ , t := range CSEMatchListItems .CSEMatchListItemsGetObjects {
264- if contains (oldItemIds , t .ID ) {
265- err = c .DeleteCSEMatchListItem (t .ID )
285+ for _ , oldItem := range CSEMatchListItems .CSEMatchListItemsGetObjects {
286+ if contains (deleteItemIds , oldItem .ID ) {
287+ err = c .DeleteCSEMatchListItem (oldItem .ID )
266288 if err != nil {
267- log . Printf ("[WARN ] An error occurred deleting match list item with id: %s, err: %v" , t .ID , err )
289+ return fmt . Errorf ("[ERROR ] An error occurred while deleting match list item with id %s, err: %v" , oldItem .ID , err )
268290 }
269291 }
270292 }
271293
272- //Add new items
273- if len ( newItems ) > 0 {
274- err = c .CreateCSEMatchListItems ( newItems , d . Id () )
294+ // Update old items with new items
295+ for _ , updateItem := range updateItems {
296+ err = c .UpdateCSEMatchListItem ( updateItem )
275297 if err != nil {
276- log . Printf ("[WARN ] An error occurred while adding match list items to match list id: %s, err: %v" , d . Id () , err )
298+ return fmt . Errorf ("[ERROR ] An error occurred while updating match list item with id %s, err: %v" , updateItem . ID , err )
277299 }
278-
279300 }
280301
281- CSEMatchListItems , err = c .GetCSEMatchListItemsInMatchList (d .Id ())
282- if err != nil {
283- log .Printf ("[WARN] CSE Match List items not found when looking by match list id: %s, err: %v" , d .Id (), err )
302+ //Add new items
303+ if len (addItems ) > 0 {
304+ err = c .CreateCSEMatchListItems (addItems , d .Id ())
305+ if err != nil {
306+ return fmt .Errorf ("[ERROR] An error occurred while adding match list items to match list with id %s, err: %v" , d .Id (), err )
307+ }
284308 }
285309
286310 // Wait for update to finish
287- createStateConf := & resource.StateChangeConf {
311+ updateStateConf := & resource.StateChangeConf {
288312 Target : []string {
289313 fmt .Sprint (len (newItems )),
290314 },
291315 Refresh : func () (interface {}, string , error ) {
292316 resp , err := c .GetCSEMatchListItemsInMatchList (d .Id ())
293317 if err != nil {
294- log .Printf ("[WARN ] CSE Match List items not found when looking by match list id: %s, err: %v" , d .Id (), err )
318+ log .Printf ("[ERROR ] CSE Match List items not found when looking by match list id %s, err: %v" , d .Id (), err )
295319 return 0 , "" , err
296320 }
297321 return resp , fmt .Sprint (resp .Total ), nil
@@ -302,9 +326,9 @@ func resourceSumologicCSEMatchListUpdate(d *schema.ResourceData, meta interface{
302326 ContinuousTargetOccurence : 1 ,
303327 }
304328
305- _ , err = createStateConf .WaitForState ()
329+ _ , err = updateStateConf .WaitForState ()
306330 if err != nil {
307- return fmt .Errorf ("error waiting for match list (%s) to be updated: %s" , d .Id (), err )
331+ return fmt .Errorf ("[ERROR] Error waiting for match list with id %s to be updated: %s" , d .Id (), err )
308332 }
309333
310334 return resourceSumologicCSEMatchListRead (d , meta )
0 commit comments