Skip to content

Commit cd34000

Browse files
authored
INTMDB-519: mongodbatlas_third_party_integration - api_token keeps updating on every apply (#1011)
* Add additional overrides for obfuscated API values set to parameters * Add username to sensitive values * Add WebHook secret and URL to manage drift
1 parent a66026e commit cd34000

4 files changed

+50
-16
lines changed

mongodbatlas/data_source_mongodbatlas_third_party_integration.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ func dataSourceMongoDBAtlasThirdPartyIntegrationRead(ctx context.Context, d *sch
144144
return diag.FromErr(fmt.Errorf("error getting third party integration for type %s %w", queryType, err))
145145
}
146146

147-
fieldMap := integrationToSchema(integration)
147+
fieldMap := integrationToSchema(d, integration)
148148

149149
for property, value := range fieldMap {
150150
if err = d.Set(property, value); err != nil {

mongodbatlas/data_source_mongodbatlas_third_party_integrations.go

Lines changed: 46 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func dataSourceMongoDBAtlasThirdPartyIntegrationsRead(ctx context.Context, d *sc
3737
return diag.FromErr(fmt.Errorf("error getting third party integration list: %s", err))
3838
}
3939

40-
if err = d.Set("results", flattenIntegrations(integrations, projectID)); err != nil {
40+
if err = d.Set("results", flattenIntegrations(d, integrations, projectID)); err != nil {
4141
return diag.FromErr(fmt.Errorf("error setting results for third party integrations %s", err))
4242
}
4343

@@ -46,43 +46,75 @@ func dataSourceMongoDBAtlasThirdPartyIntegrationsRead(ctx context.Context, d *sc
4646
return nil
4747
}
4848

49-
func flattenIntegrations(integrations *matlas.ThirdPartyIntegrations, projectID string) (list []map[string]interface{}) {
49+
func flattenIntegrations(d *schema.ResourceData, integrations *matlas.ThirdPartyIntegrations, projectID string) (list []map[string]interface{}) {
5050
if len(integrations.Results) == 0 {
5151
return
5252
}
5353

5454
list = make([]map[string]interface{}, 0, len(integrations.Results))
5555

5656
for _, integration := range integrations.Results {
57-
service := integrationToSchema(integration)
57+
service := integrationToSchema(d, integration)
5858
service["project_id"] = projectID
5959
list = append(list, service)
6060
}
6161

6262
return
6363
}
6464

65-
func integrationToSchema(integration *matlas.ThirdPartyIntegration) map[string]interface{} {
65+
func integrationToSchema(d *schema.ResourceData, integration *matlas.ThirdPartyIntegration) map[string]interface{} {
66+
integrationSchema := schemaToIntegration(d)
67+
if integrationSchema.LicenseKey == "" {
68+
integrationSchema.APIKey = integration.LicenseKey
69+
}
70+
if integrationSchema.WriteToken == "" {
71+
integrationSchema.APIKey = integration.WriteToken
72+
}
73+
if integrationSchema.ReadToken == "" {
74+
integrationSchema.APIKey = integration.ReadToken
75+
}
76+
if integrationSchema.APIKey == "" {
77+
integrationSchema.APIKey = integration.APIKey
78+
}
79+
if integrationSchema.ServiceKey == "" {
80+
integrationSchema.APIKey = integration.ServiceKey
81+
}
82+
if integrationSchema.APIToken == "" {
83+
integrationSchema.APIKey = integration.APIToken
84+
}
85+
if integrationSchema.RoutingKey == "" {
86+
integrationSchema.APIKey = integration.RoutingKey
87+
}
88+
if integrationSchema.Secret == "" {
89+
integrationSchema.APIKey = integration.Secret
90+
}
91+
if integrationSchema.Password == "" {
92+
integrationSchema.APIKey = integration.Password
93+
}
94+
if integrationSchema.UserName == "" {
95+
integrationSchema.APIKey = integration.UserName
96+
}
97+
6698
out := map[string]interface{}{
6799
"type": integration.Type,
68-
"license_key": integration.LicenseKey,
100+
"license_key": integrationSchema.LicenseKey,
69101
"account_id": integration.AccountID,
70-
"write_token": integration.WriteToken,
71-
"read_token": integration.ReadToken,
72-
"api_key": integration.APIKey,
102+
"write_token": integrationSchema.WriteToken,
103+
"read_token": integrationSchema.ReadToken,
104+
"api_key": integrationSchema.APIKey,
73105
"region": integration.Region,
74-
"service_key": integration.ServiceKey,
75-
"api_token": integration.APIToken,
106+
"service_key": integrationSchema.ServiceKey,
107+
"api_token": integrationSchema.APIToken,
76108
"team_name": integration.TeamName,
77109
"channel_name": integration.ChannelName,
78-
"routing_key": integration.RoutingKey,
110+
"routing_key": integrationSchema.RoutingKey,
79111
"flow_name": integration.FlowName,
80112
"org_name": integration.OrgName,
81113
"url": integration.URL,
82-
"secret": integration.Secret,
114+
"secret": integrationSchema.Secret,
83115
"microsoft_teams_webhook_url": integration.MicrosoftTeamsWebhookURL,
84-
"user_name": integration.UserName,
85-
"password": integration.Password,
116+
"user_name": integrationSchema.UserName,
117+
"password": integrationSchema.Password,
86118
"service_discovery": integration.ServiceDiscovery,
87119
"scheme": integration.Scheme,
88120
"enabled": integration.Enabled,

mongodbatlas/resource_mongodbatlas_alert_configuration.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -746,6 +746,8 @@ func flattenAlertConfigurationNotifications(d *schema.ResourceData, notification
746746
notifications[i].ServiceKey = notificationsSchema[i].ServiceKey
747747
notifications[i].VictorOpsAPIKey = notificationsSchema[i].VictorOpsAPIKey
748748
notifications[i].VictorOpsRoutingKey = notificationsSchema[i].VictorOpsRoutingKey
749+
notifications[i].WebhookURL = notificationsSchema[i].WebhookURL
750+
notifications[i].WebhookSecret = notificationsSchema[i].WebhookSecret
749751
}
750752
}
751753

mongodbatlas/resource_mongodbatlas_third_party_integration.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ func resourceMongoDBAtlasThirdPartyIntegrationRead(ctx context.Context, d *schem
207207
return diag.FromErr(fmt.Errorf("error getting third party integration resource info %s %w", integrationType, err))
208208
}
209209

210-
integrationMap := integrationToSchema(integration)
210+
integrationMap := integrationToSchema(d, integration)
211211

212212
for key, val := range integrationMap {
213213
if err := d.Set(key, val); err != nil {

0 commit comments

Comments
 (0)