Skip to content

Commit 0b4f787

Browse files
authored
[datadog_security_monitoring] Update security-monitoring to use new api format (#1584)
* update security-monitoring to use new api format * make docs * bump dd go client to latest
1 parent dd4103a commit 0b4f787

7 files changed

+61
-34
lines changed

datadog/data_source_datadog_security_monitoring_rules.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,12 @@ func dataSourceDatadogSecurityMonitoringRulesRead(ctx context.Context, d *schema
121121
return diag.FromErr(err)
122122
}
123123

124-
for _, rule := range response.GetData() {
124+
for _, ruleR := range response.GetData() {
125+
if ruleR.SecurityMonitoringStandardRuleResponse == nil {
126+
continue
127+
}
128+
129+
rule := ruleR.SecurityMonitoringStandardRuleResponse
125130
if !matchesSecMonRuleFilters(rule, nameFilter, defaultFilter, tagFilter) {
126131
continue
127132
}
@@ -180,7 +185,7 @@ func computeSecMonDataSourceRulesID(nameFilter *string, defaultFilter *bool, tag
180185
return fmt.Sprintf("%x", h.Sum(nil))
181186
}
182187

183-
func buildSecurityMonitoringTfRule(rule datadogV2.SecurityMonitoringRuleResponse) map[string]interface{} {
188+
func buildSecurityMonitoringTfRule(rule *datadogV2.SecurityMonitoringStandardRuleResponse) map[string]interface{} {
184189
tfRule := make(map[string]interface{})
185190

186191
cases := make([]map[string]interface{}, len(rule.GetCases()))
@@ -242,7 +247,7 @@ func buildSecurityMonitoringTfRule(rule datadogV2.SecurityMonitoringRuleResponse
242247
}
243248

244249
func matchesSecMonRuleFilters(
245-
rule datadogV2.SecurityMonitoringRuleResponse,
250+
rule *datadogV2.SecurityMonitoringStandardRuleResponse,
246251
nameFilter *string,
247252
defaultFilter *bool,
248253
tagFilter map[string]bool) bool {

datadog/resource_datadog_security_monitoring_default_rule.go

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,12 @@ func resourceDatadogSecurityMonitoringDefaultRuleRead(ctx context.Context, d *sc
120120
return diag.FromErr(err)
121121
}
122122

123-
d.Set("enabled", *ruleResponse.IsEnabled)
123+
rule := ruleResponse.SecurityMonitoringStandardRuleResponse
124+
if rule == nil {
125+
return diag.Errorf("signal rule type is not currently supported")
126+
}
127+
128+
d.Set("enabled", *rule.IsEnabled)
124129

125130
if v, ok := d.GetOk("case"); ok {
126131
tfCasesRaw := v.([]interface{})
@@ -129,7 +134,7 @@ func resourceDatadogSecurityMonitoringDefaultRuleRead(ctx context.Context, d *sc
129134
tfCase := tfCaseRaw.(map[string]interface{})
130135
var ruleCase *datadogV2.SecurityMonitoringRuleCase
131136
tfStatus := datadogV2.SecurityMonitoringRuleSeverity(tfCase["status"].(string))
132-
for _, rc := range ruleResponse.GetCases() {
137+
for _, rc := range rule.GetCases() {
133138
if *rc.Status == tfStatus {
134139
ruleCase = &rc
135140
break
@@ -146,8 +151,8 @@ func resourceDatadogSecurityMonitoringDefaultRuleRead(ctx context.Context, d *sc
146151
}
147152
}
148153

149-
ruleFilters := make([]map[string]interface{}, len(ruleResponse.GetFilters()))
150-
for idx, responseRuleFilter := range ruleResponse.GetFilters() {
154+
ruleFilters := make([]map[string]interface{}, len(rule.GetFilters()))
155+
for idx, responseRuleFilter := range rule.GetFilters() {
151156
ruleFilters[idx] = map[string]interface{}{
152157
"action": responseRuleFilter.GetAction(),
153158
"query": responseRuleFilter.GetQuery(),
@@ -156,9 +161,9 @@ func resourceDatadogSecurityMonitoringDefaultRuleRead(ctx context.Context, d *sc
156161

157162
d.Set("filter", ruleFilters)
158163

159-
d.Set("type", ruleResponse.GetType())
164+
d.Set("type", rule.GetType())
160165

161-
responseOptions := ruleResponse.GetOptions()
166+
responseOptions := rule.GetOptions()
162167
ruleOptions := []map[string]interface{}{{
163168
"decrease_criticality_based_on_env": responseOptions.GetDecreaseCriticalityBasedOnEnv(),
164169
}}
@@ -176,7 +181,6 @@ func resourceDatadogSecurityMonitoringDefaultRuleUpdate(ctx context.Context, d *
176181
ruleID := d.Id()
177182

178183
response, httpResponse, err := apiInstances.GetSecurityMonitoringApiV2().GetSecurityMonitoringRule(auth, ruleID)
179-
180184
if err != nil {
181185
if httpResponse != nil && httpResponse.StatusCode == 404 {
182186
return diag.FromErr(errors.New("default rule does not exist"))
@@ -188,11 +192,16 @@ func resourceDatadogSecurityMonitoringDefaultRuleUpdate(ctx context.Context, d *
188192
return diag.FromErr(err)
189193
}
190194

191-
if !response.GetIsDefault() {
195+
rule := response.SecurityMonitoringStandardRuleResponse
196+
if rule == nil {
197+
return diag.Errorf("signal rule type is not currently supported")
198+
}
199+
200+
if !rule.GetIsDefault() {
192201
return diag.FromErr(errors.New("rule is not a default rule"))
193202
}
194203

195-
ruleUpdate, shouldUpdate, err := buildSecMonDefaultRuleUpdatePayload(response, d)
204+
ruleUpdate, shouldUpdate, err := buildSecMonDefaultRuleUpdatePayload(rule, d)
196205

197206
if err != nil {
198207
return diag.FromErr(err)
@@ -207,7 +216,7 @@ func resourceDatadogSecurityMonitoringDefaultRuleUpdate(ctx context.Context, d *
207216
return nil
208217
}
209218

210-
func buildSecMonDefaultRuleUpdatePayload(currentState datadogV2.SecurityMonitoringRuleResponse, d *schema.ResourceData) (*datadogV2.SecurityMonitoringRuleUpdatePayload, bool, error) {
219+
func buildSecMonDefaultRuleUpdatePayload(currentState *datadogV2.SecurityMonitoringStandardRuleResponse, d *schema.ResourceData) (*datadogV2.SecurityMonitoringRuleUpdatePayload, bool, error) {
211220
payload := datadogV2.SecurityMonitoringRuleUpdatePayload{}
212221

213222
isEnabled := d.Get("enabled").(bool)

datadog/resource_datadog_security_monitoring_rule.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -317,13 +317,13 @@ func resourceDatadogSecurityMonitoringRuleCreate(ctx context.Context, d *schema.
317317
return diag.FromErr(err)
318318
}
319319

320-
d.SetId(response.GetId())
320+
d.SetId(response.SecurityMonitoringStandardRuleResponse.GetId())
321321

322322
return nil
323323
}
324324

325325
func buildCreatePayload(d *schema.ResourceData) (datadogV2.SecurityMonitoringRuleCreatePayload, error) {
326-
payload := datadogV2.SecurityMonitoringRuleCreatePayload{}
326+
payload := datadogV2.SecurityMonitoringStandardRuleCreatePayload{}
327327
payload.Cases = buildCreatePayloadCases(d)
328328

329329
payload.IsEnabled = d.Get("enabled").(bool)
@@ -357,11 +357,11 @@ func buildCreatePayload(d *schema.ResourceData) (datadogV2.SecurityMonitoringRul
357357
if ruleType, err := datadogV2.NewSecurityMonitoringRuleTypeCreateFromValue(v.(string)); err == nil {
358358
payload.Type = ruleType
359359
} else {
360-
return payload, err
360+
return datadogV2.SecurityMonitoringStandardRuleCreatePayloadAsSecurityMonitoringRuleCreatePayload(&payload), err
361361
}
362362
}
363363

364-
return payload, nil
364+
return datadogV2.SecurityMonitoringStandardRuleCreatePayloadAsSecurityMonitoringRuleCreatePayload(&payload), nil
365365
}
366366

367367
func buildCreatePayloadCases(d *schema.ResourceData) []datadogV2.SecurityMonitoringRuleCaseCreate {
@@ -486,12 +486,12 @@ func extractMapFromInterface(tfOptionsList []interface{}) map[string]interface{}
486486
return tfOptions
487487
}
488488

489-
func buildCreatePayloadQueries(d *schema.ResourceData) []datadogV2.SecurityMonitoringRuleQueryCreate {
489+
func buildCreatePayloadQueries(d *schema.ResourceData) []datadogV2.SecurityMonitoringStandardRuleQuery {
490490
tfQueries := d.Get("query").([]interface{})
491-
payloadQueries := make([]datadogV2.SecurityMonitoringRuleQueryCreate, len(tfQueries))
491+
payloadQueries := make([]datadogV2.SecurityMonitoringStandardRuleQuery, len(tfQueries))
492492
for idx, tfQuery := range tfQueries {
493493
query := tfQuery.(map[string]interface{})
494-
payloadQuery := datadogV2.SecurityMonitoringRuleQueryCreate{}
494+
payloadQuery := datadogV2.SecurityMonitoringStandardRuleQuery{}
495495

496496
if v, ok := query["aggregation"]; ok {
497497
aggregation := datadogV2.SecurityMonitoringRuleQueryAggregation(v.(string))
@@ -577,12 +577,12 @@ func resourceDatadogSecurityMonitoringRuleRead(ctx context.Context, d *schema.Re
577577
return diag.FromErr(err)
578578
}
579579

580-
updateResourceDataFromResponse(d, ruleResponse)
580+
updateResourceDataFromResponse(d, ruleResponse.SecurityMonitoringStandardRuleResponse)
581581

582582
return nil
583583
}
584584

585-
func updateResourceDataFromResponse(d *schema.ResourceData, ruleResponse datadogV2.SecurityMonitoringRuleResponse) {
585+
func updateResourceDataFromResponse(d *schema.ResourceData, ruleResponse *datadogV2.SecurityMonitoringStandardRuleResponse) {
586586
ruleCases := make([]interface{}, len(ruleResponse.GetCases()))
587587
for idx := range ruleResponse.GetCases() {
588588
ruleCase := make(map[string]interface{})
@@ -653,7 +653,7 @@ func updateResourceDataFromResponse(d *schema.ResourceData, ruleResponse datadog
653653
}
654654
}
655655

656-
func extractFiltersFromRuleResponse(ruleResponse datadogV2.SecurityMonitoringRuleResponse) []interface{} {
656+
func extractFiltersFromRuleResponse(ruleResponse *datadogV2.SecurityMonitoringStandardRuleResponse) []interface{} {
657657
filters := make([]interface{}, len(ruleResponse.GetFilters()))
658658
for idx, responseFilter := range ruleResponse.GetFilters() {
659659
filter := make(map[string]interface{})
@@ -716,7 +716,7 @@ func resourceDatadogSecurityMonitoringRuleUpdate(ctx context.Context, d *schema.
716716
return diag.FromErr(err)
717717
}
718718

719-
updateResourceDataFromResponse(d, response)
719+
updateResourceDataFromResponse(d, response.SecurityMonitoringStandardRuleResponse)
720720

721721
return nil
722722
}
@@ -774,7 +774,7 @@ func buildUpdatePayload(d *schema.ResourceData) datadogV2.SecurityMonitoringRule
774774
payloadQueries := make([]datadogV2.SecurityMonitoringRuleQuery, len(tfQueries))
775775
for idx, tfQuery := range tfQueries {
776776
query := tfQuery.(map[string]interface{})
777-
payloadQuery := datadogV2.SecurityMonitoringRuleQuery{}
777+
payloadQuery := datadogV2.SecurityMonitoringStandardRuleQuery{}
778778

779779
if v, ok := query["aggregation"]; ok {
780780
aggregation := datadogV2.SecurityMonitoringRuleQueryAggregation(v.(string))
@@ -819,10 +819,11 @@ func buildUpdatePayload(d *schema.ResourceData) datadogV2.SecurityMonitoringRule
819819
}
820820

821821
queryQuery := query["query"].(string)
822-
payloadQuery.Query = &queryQuery
822+
payloadQuery.Query = queryQuery
823823

824-
payloadQueries[idx] = payloadQuery
824+
payloadQueries[idx] = datadogV2.SecurityMonitoringStandardRuleQueryAsSecurityMonitoringRuleQuery(&payloadQuery)
825825
}
826+
826827
payload.Queries = payloadQueries
827828
}
828829

datadog/tests/data_source_datadog_security_monitoring_rules_test.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,11 @@ func securityMonitoringCheckRuleCountNameFilter(accProvider func() (*schema.Prov
100100

101101
ruleCount := 0
102102
for _, rule := range *allRules {
103-
if strings.Contains(rule.GetName(), name) {
103+
if rule.SecurityMonitoringStandardRuleResponse == nil {
104+
continue
105+
}
106+
107+
if strings.Contains(rule.SecurityMonitoringStandardRuleResponse.GetName(), name) {
104108
ruleCount++
105109
}
106110
}
@@ -120,7 +124,11 @@ func securityMonitoringCheckRuleCountTagsFilter(accProvider func() (*schema.Prov
120124

121125
ruleCount := 0
122126
for _, rule := range *allRules {
123-
for _, tag := range rule.GetTags() {
127+
if rule.SecurityMonitoringStandardRuleResponse == nil {
128+
continue
129+
}
130+
131+
for _, tag := range rule.SecurityMonitoringStandardRuleResponse.GetTags() {
124132
if strings.Contains(tag, filterTag) {
125133
ruleCount++
126134
}
@@ -141,7 +149,11 @@ func securityMonitoringCheckRuleCountDefaultFilter(accProvider func() (*schema.P
141149

142150
ruleCount := 0
143151
for _, rule := range *allRules {
144-
if rule.GetIsDefault() == isDefault {
152+
if rule.SecurityMonitoringStandardRuleResponse == nil {
153+
continue
154+
}
155+
156+
if rule.SecurityMonitoringStandardRuleResponse.GetIsDefault() == isDefault {
145157
ruleCount++
146158
}
147159
}

docs/resources/security_monitoring_rule.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ Required:
9696
Optional:
9797

9898
- `agent_rule` (Block List, Deprecated) **Deprecated**. It won't be applied anymore. **Deprecated.** `agent_rule` has been deprecated in favor of new Agent Rule resource. (see [below for nested schema](#nestedblock--query--agent_rule))
99-
- `aggregation` (String) The aggregation type. Valid values are `count`, `cardinality`, `sum`, `max`, `new_value`, `geo_data`.
99+
- `aggregation` (String) The aggregation type. Valid values are `count`, `cardinality`, `sum`, `max`, `new_value`, `geo_data`, `event_count`.
100100
- `distinct_fields` (List of String) Field for which the cardinality is measured. Sent as an array.
101101
- `group_by_fields` (List of String) Fields to group by.
102102
- `metric` (String) The target field to aggregate over when using the `sum`, `max`, or `new_value` aggregations.

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module github.com/terraform-providers/terraform-provider-datadog
22

33
require (
4-
github.com/DataDog/datadog-api-client-go/v2 v2.2.1-0.20220912161001-91d6ffb4d0dd
4+
github.com/DataDog/datadog-api-client-go/v2 v2.3.1
55
github.com/DataDog/dd-sdk-go-testing v0.0.0-20211116174033-1cd082e322ad
66
github.com/dnaeon/go-vcr v1.0.1
77
github.com/hashicorp/go-cleanhttp v0.5.2

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
22
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
33
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
4-
github.com/DataDog/datadog-api-client-go/v2 v2.2.1-0.20220912161001-91d6ffb4d0dd h1:w8gZX+jeqRf10W32Ri69NO0DPJ/rAU9atOxLacZIkyY=
5-
github.com/DataDog/datadog-api-client-go/v2 v2.2.1-0.20220912161001-91d6ffb4d0dd/go.mod h1:98b/MtTwSAr/yhTfhCR1oxAqQ/4tMkdrgKH7fYiDA0g=
4+
github.com/DataDog/datadog-api-client-go/v2 v2.3.1 h1:+0FHme5n4AuJEGmzaN8+n3OWKFLiJoBP+FNI60EqvuU=
5+
github.com/DataDog/datadog-api-client-go/v2 v2.3.1/go.mod h1:98b/MtTwSAr/yhTfhCR1oxAqQ/4tMkdrgKH7fYiDA0g=
66
github.com/DataDog/datadog-go v4.4.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
77
github.com/DataDog/datadog-go v4.8.3+incompatible h1:fNGaYSuObuQb5nzeTQqowRAd9bpDIRRV4/gUtIBjh8Q=
88
github.com/DataDog/datadog-go v4.8.3+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=

0 commit comments

Comments
 (0)