Skip to content

Commit beddf96

Browse files
committed
add suppression tags
1 parent de767da commit beddf96

File tree

2 files changed

+36
-11
lines changed

2 files changed

+36
-11
lines changed

datadog/fwprovider/data_source_security_monitoring_suppression.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type securityMonitoringSuppressionDataSourceItem struct {
2828
RuleQuery types.String `tfsdk:"rule_query"`
2929
SuppressionQuery types.String `tfsdk:"suppression_query"`
3030
DataExclusionQuery types.String `tfsdk:"data_exclusion_query"`
31+
Tags types.List `tfsdk:"tags"`
3132
}
3233

3334
type securityMonitoringSuppressionsDataSourceModel struct {
@@ -97,6 +98,11 @@ func (r *securityMonitoringSuppressionDataSource) Read(ctx context.Context, requ
9798
expirationDate := time.UnixMilli(*attributes.ExpirationDate).Format(time.RFC3339)
9899
suppressionModel.ExpirationDate = types.StringValue(expirationDate)
99100
}
101+
if attributes.Tags == nil {
102+
suppressionModel.Tags = types.ListNull(types.StringType)
103+
} else {
104+
suppressionModel.Tags, _ = types.ListValueFrom(ctx, types.StringType, attributes.Tags)
105+
}
100106

101107
suppressionIds[idx] = suppression.GetId()
102108
suppressions[idx] = suppressionModel
@@ -136,6 +142,7 @@ func (*securityMonitoringSuppressionDataSource) Schema(_ context.Context, _ data
136142
"rule_query": types.StringType,
137143
"suppression_query": types.StringType,
138144
"data_exclusion_query": types.StringType,
145+
"tags": types.ListType{ElemType: types.StringType},
139146
},
140147
},
141148
},

datadog/fwprovider/resource_datadog_security_monitoring_suppression.go

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ type securityMonitoringSuppressionModel struct {
3232
SuppressionQuery types.String `tfsdk:"suppression_query"`
3333
DataExclusionQuery types.String `tfsdk:"data_exclusion_query"`
3434
Validate types.Bool `tfsdk:"validate"`
35+
Tags types.List `tfsdk:"tags"`
3536
}
3637

3738
type securityMonitoringSuppressionResource struct {
@@ -98,6 +99,11 @@ func (r *securityMonitoringSuppressionResource) Schema(_ context.Context, _ reso
9899
Default: booldefault.StaticBool(true),
99100
Description: "Whether to validate the suppression rule during `terraform plan`. When set to `true`, the rule is validated against Datadog's suppression validation endpoint.",
100101
},
102+
"tags": schema.ListAttribute{
103+
Optional: true,
104+
ElementType: types.StringType,
105+
Description: "A list of tags associated with the suppression rule.",
106+
},
101107
},
102108
}
103109
}
@@ -113,7 +119,7 @@ func (r *securityMonitoringSuppressionResource) Create(ctx context.Context, requ
113119
return
114120
}
115121

116-
suppressionPayload, err := r.buildCreateSecurityMonitoringSuppressionPayload(&state)
122+
suppressionPayload, err := r.buildCreateSecurityMonitoringSuppressionPayload(&state, ctx)
117123

118124
if err != nil {
119125
response.Diagnostics.AddError("error while parsing resource", err.Error())
@@ -181,7 +187,7 @@ func (r *securityMonitoringSuppressionResource) Update(ctx context.Context, requ
181187
updateStartDate := plan.StartDate != state.StartDate
182188
updateExpirationDate := plan.ExpirationDate != state.ExpirationDate
183189

184-
suppressionPayload, err := r.buildUpdateSecurityMonitoringSuppressionPayload(&plan, updateStartDate, updateExpirationDate)
190+
suppressionPayload, err := r.buildUpdateSecurityMonitoringSuppressionPayload(&plan, ctx, updateStartDate, updateExpirationDate)
185191

186192
if err != nil {
187193
response.Diagnostics.AddError("error while parsing resource", err.Error())
@@ -268,7 +274,7 @@ func (r *securityMonitoringSuppressionResource) ModifyPlan(ctx context.Context,
268274
}
269275
}
270276

271-
suppressionPayload, err := r.buildCreateSecurityMonitoringSuppressionPayload(&newConfig)
277+
suppressionPayload, err := r.buildCreateSecurityMonitoringSuppressionPayload(&newConfig, ctx)
272278
if err != nil {
273279
response.Diagnostics.AddError("error while building suppression payload for validation", err.Error())
274280
return
@@ -282,8 +288,8 @@ func (r *securityMonitoringSuppressionResource) ModifyPlan(ctx context.Context,
282288
}
283289
}
284290

285-
func (r *securityMonitoringSuppressionResource) buildCreateSecurityMonitoringSuppressionPayload(state *securityMonitoringSuppressionModel) (*datadogV2.SecurityMonitoringSuppressionCreateRequest, error) {
286-
name, description, enabled, startDate, expirationDate, ruleQuery, suppressionQuery, dataExclusionQuery, err := r.extractSuppressionAttributesFromResource(state)
291+
func (r *securityMonitoringSuppressionResource) buildCreateSecurityMonitoringSuppressionPayload(state *securityMonitoringSuppressionModel, ctx context.Context) (*datadogV2.SecurityMonitoringSuppressionCreateRequest, error) {
292+
name, description, enabled, startDate, expirationDate, ruleQuery, suppressionQuery, dataExclusionQuery, tags, err := r.extractSuppressionAttributesFromResource(state, ctx)
287293

288294
if err != nil {
289295
return nil, err
@@ -295,13 +301,14 @@ func (r *securityMonitoringSuppressionResource) buildCreateSecurityMonitoringSup
295301
attributes.Description = description
296302
attributes.StartDate = startDate
297303
attributes.ExpirationDate = expirationDate
304+
attributes.Tags = tags
298305

299306
data := datadogV2.NewSecurityMonitoringSuppressionCreateData(*attributes, datadogV2.SECURITYMONITORINGSUPPRESSIONTYPE_SUPPRESSIONS)
300307
return datadogV2.NewSecurityMonitoringSuppressionCreateRequest(*data), nil
301308
}
302309

303-
func (r *securityMonitoringSuppressionResource) buildUpdateSecurityMonitoringSuppressionPayload(state *securityMonitoringSuppressionModel, updateStartDate bool, updateExpirationDate bool) (*datadogV2.SecurityMonitoringSuppressionUpdateRequest, error) {
304-
name, description, enabled, startDate, expirationDate, ruleQuery, suppressionQuery, dataExclusionQuery, err := r.extractSuppressionAttributesFromResource(state)
310+
func (r *securityMonitoringSuppressionResource) buildUpdateSecurityMonitoringSuppressionPayload(state *securityMonitoringSuppressionModel, ctx context.Context, updateStartDate bool, updateExpirationDate bool) (*datadogV2.SecurityMonitoringSuppressionUpdateRequest, error) {
311+
name, description, enabled, startDate, expirationDate, ruleQuery, suppressionQuery, dataExclusionQuery, tags, err := r.extractSuppressionAttributesFromResource(state, ctx)
305312

306313
if err != nil {
307314
return nil, err
@@ -339,11 +346,15 @@ func (r *securityMonitoringSuppressionResource) buildUpdateSecurityMonitoringSup
339346
attributes.SetDataExclusionQuery("")
340347
}
341348

349+
if tags != nil {
350+
attributes.SetTags(tags)
351+
}
352+
342353
data := datadogV2.NewSecurityMonitoringSuppressionUpdateData(*attributes, datadogV2.SECURITYMONITORINGSUPPRESSIONTYPE_SUPPRESSIONS)
343354
return datadogV2.NewSecurityMonitoringSuppressionUpdateRequest(*data), nil
344355
}
345356

346-
func (r *securityMonitoringSuppressionResource) extractSuppressionAttributesFromResource(state *securityMonitoringSuppressionModel) (string, *string, bool, *int64, *int64, string, *string, *string, error) {
357+
func (r *securityMonitoringSuppressionResource) extractSuppressionAttributesFromResource(state *securityMonitoringSuppressionModel, ctx context.Context) (string, *string, bool, *int64, *int64, string, *string, *string, []string, error) {
347358
// Mandatory fields
348359

349360
name := state.Name.ValueString()
@@ -362,7 +373,7 @@ func (r *securityMonitoringSuppressionResource) extractSuppressionAttributesFrom
362373
startDateTime, err := time.Parse(time.RFC3339, *tfStartDate)
363374

364375
if err != nil {
365-
return "", nil, false, nil, nil, "", nil, nil, err
376+
return "", nil, false, nil, nil, "", nil, nil, nil, err
366377
}
367378

368379
startDateTimestamp := startDateTime.UnixMilli()
@@ -376,15 +387,20 @@ func (r *securityMonitoringSuppressionResource) extractSuppressionAttributesFrom
376387
expirationDateTime, err := time.Parse(time.RFC3339, *tfExpirationDate)
377388

378389
if err != nil {
379-
return "", nil, false, nil, nil, "", nil, nil, err
390+
return "", nil, false, nil, nil, "", nil, nil, nil, err
380391
}
381392

382393
expirationDateTimestamp := expirationDateTime.UnixMilli()
383394
expirationDate = &expirationDateTimestamp
384395

385396
}
386397

387-
return name, description, enabled, startDate, expirationDate, ruleQuery, suppressionQuery, dataExclusionQuery, nil
398+
tags := make([]string, 0)
399+
if !state.Tags.IsNull() {
400+
state.Tags.ElementsAs(ctx, &tags, false)
401+
}
402+
403+
return name, description, enabled, startDate, expirationDate, ruleQuery, suppressionQuery, dataExclusionQuery, tags, nil
388404
}
389405

390406
func (r *securityMonitoringSuppressionResource) updateStateFromResponse(ctx context.Context, state *securityMonitoringSuppressionModel, res *datadogV2.SecurityMonitoringSuppressionResponse) {
@@ -401,6 +417,8 @@ func (r *securityMonitoringSuppressionResource) updateStateFromResponse(ctx cont
401417
state.Description = types.StringValue(description)
402418
}
403419

420+
state.Tags, _ = types.ListValueFrom(ctx, types.StringType, attributes.GetTags())
421+
404422
state.Enabled = types.BoolValue(attributes.GetEnabled())
405423
state.RuleQuery = types.StringValue(attributes.GetRuleQuery())
406424
state.SuppressionQuery = types.StringValue(attributes.GetSuppressionQuery())

0 commit comments

Comments
 (0)