Skip to content

Commit 75d9b95

Browse files
authored
use mutex to only operate on one reosurce at a time (#981)
1 parent 06bd141 commit 75d9b95

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

datadog/resource_datadog_integration_slack_channel.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,18 @@ package datadog
22

33
import (
44
"fmt"
5+
"sync"
6+
57
"github.com/terraform-providers/terraform-provider-datadog/datadog/internal/utils"
68

79
datadogV1 "github.com/DataDog/datadog-api-client-go/api/v1/datadog"
810
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
911
)
1012

13+
// creating/modifying/deleting Slack Channel integration in parallel on one account
14+
// is unsupported by the API right now; therefore we use the mutex to only operate on one at a time
15+
var integrationSlackChannelMutex = sync.Mutex{}
16+
1117
func resourceDatadogIntegrationSlackChannel() *schema.Resource {
1218
return &schema.Resource{
1319
Description: "Resource for interacting with the Datadog Slack channel API",
@@ -94,6 +100,9 @@ func resourceDatadogIntegrationSlackChannelCreate(d *schema.ResourceData, meta i
94100
datadogClient := providerConf.DatadogClientV1
95101
auth := providerConf.AuthV1
96102

103+
integrationSlackChannelMutex.Lock()
104+
defer integrationSlackChannelMutex.Unlock()
105+
97106
ddSlackChannel, err := buildDatadogSlackChannel(d)
98107
accountName := d.Get("account_name").(string)
99108

@@ -133,6 +142,9 @@ func resourceDatadogIntegrationSlackChannelUpdate(d *schema.ResourceData, meta i
133142
datadogClient := providerConf.DatadogClientV1
134143
auth := providerConf.AuthV1
135144

145+
integrationSlackChannelMutex.Lock()
146+
defer integrationSlackChannelMutex.Unlock()
147+
136148
ddObject, err := buildDatadogSlackChannel(d)
137149
accountName, channelName, err := utils.AccountNameAndChannelNameFromID(d.Id())
138150
if err != nil {
@@ -155,6 +167,9 @@ func resourceDatadogIntegrationSlackChannelDelete(d *schema.ResourceData, meta i
155167
datadogClient := providerConf.DatadogClientV1
156168
auth := providerConf.AuthV1
157169

170+
integrationSlackChannelMutex.Lock()
171+
defer integrationSlackChannelMutex.Unlock()
172+
158173
accountName, channelName, err := utils.AccountNameAndChannelNameFromID(d.Id())
159174
if err != nil {
160175
return err

0 commit comments

Comments
 (0)