Skip to content

Commit 4c458a3

Browse files
committed
changed aws_guardduty_feature additional_configuration from list to set
1 parent 9e31aac commit 4c458a3

File tree

4 files changed

+89
-8
lines changed

4 files changed

+89
-8
lines changed

.changelog/36985.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
resource/guardduty_detector_feature: Fixed the additional_configuration block to ignore ordering
3+
```

internal/service/guardduty/detector_feature.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,12 @@ func ResourceDetectorFeature() *schema.Resource {
3131
Schema: map[string]*schema.Schema{
3232
"additional_configuration": {
3333
Optional: true,
34-
ForceNew: true,
35-
Type: schema.TypeList,
34+
Type: schema.TypeSet,
3635
Elem: &schema.Resource{
3736
Schema: map[string]*schema.Schema{
3837
"name": {
3938
Type: schema.TypeString,
4039
Required: true,
41-
ForceNew: true,
4240
ValidateFunc: validation.StringInSlice(guardduty.FeatureAdditionalConfiguration_Values(), false),
4341
},
4442
"status": {
@@ -79,8 +77,8 @@ func resourceDetectorFeaturePut(ctx context.Context, d *schema.ResourceData, met
7977
Status: aws.String(d.Get("status").(string)),
8078
}
8179

82-
if v, ok := d.GetOk("additional_configuration"); ok && len(v.([]interface{})) > 0 {
83-
feature.AdditionalConfiguration = expandDetectorAdditionalConfigurations(v.([]interface{}))
80+
if v, ok := d.GetOk("additional_configuration"); ok && v.(*schema.Set).Len() > 0 {
81+
feature.AdditionalConfiguration = expandDetectorAdditionalConfigurations(v.(*schema.Set).List())
8482
}
8583

8684
input := &guardduty.UpdateDetectorInput{

internal/service/guardduty/detector_feature_test.go

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"testing"
1010

1111
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
12+
"github.com/hashicorp/terraform-plugin-testing/plancheck"
1213
"github.com/hashicorp/terraform-plugin-testing/terraform"
1314
"github.com/hashicorp/terraform-provider-aws/internal/acctest"
1415
"github.com/hashicorp/terraform-provider-aws/internal/conns"
@@ -93,6 +94,55 @@ func testAccDetectorFeature_additionalConfiguration(t *testing.T) {
9394
})
9495
}
9596

97+
func testAccDetectorFeature_additionalConfigurationOrder(t *testing.T) {
98+
ctx := acctest.Context(t)
99+
resourceName := "aws_guardduty_detector_feature.test"
100+
101+
resource.Test(t, resource.TestCase{
102+
PreCheck: func() {
103+
acctest.PreCheck(ctx, t)
104+
testAccPreCheckDetectorNotExists(ctx, t)
105+
},
106+
ErrorCheck: acctest.ErrorCheck(t, names.GuardDutyServiceID),
107+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories,
108+
CheckDestroy: acctest.CheckDestroyNoop,
109+
Steps: []resource.TestStep{
110+
{
111+
Config: testAccDetectorFeatureConfig_additionalConfiguration_multiple([]string{"EKS_ADDON_MANAGEMENT", "EC2_AGENT_MANAGEMENT", "ECS_FARGATE_AGENT_MANAGEMENT"}),
112+
Check: resource.ComposeTestCheckFunc(
113+
testAccCheckDetectorFeatureExists(ctx, resourceName),
114+
resource.TestCheckResourceAttr(resourceName, "additional_configuration.#", "3"),
115+
resource.TestCheckTypeSetElemNestedAttrs(resourceName, "additional_configuration.*",
116+
map[string]string{"name": "EKS_ADDON_MANAGEMENT", "status": "ENABLED"}),
117+
resource.TestCheckTypeSetElemNestedAttrs(resourceName, "additional_configuration.*",
118+
map[string]string{"name": "EC2_AGENT_MANAGEMENT", "status": "ENABLED"}),
119+
resource.TestCheckTypeSetElemNestedAttrs(resourceName, "additional_configuration.*",
120+
map[string]string{"name": "ECS_FARGATE_AGENT_MANAGEMENT", "status": "ENABLED"}),
121+
),
122+
},
123+
{
124+
// Change the order of the additional_configuration blocks and ensure that there is an empty plan
125+
Config: testAccDetectorFeatureConfig_additionalConfiguration_multiple([]string{"EC2_AGENT_MANAGEMENT", "ECS_FARGATE_AGENT_MANAGEMENT", "EKS_ADDON_MANAGEMENT"}),
126+
ConfigPlanChecks: resource.ConfigPlanChecks{
127+
PreApply: []plancheck.PlanCheck{
128+
plancheck.ExpectEmptyPlan(),
129+
},
130+
},
131+
Check: resource.ComposeTestCheckFunc(
132+
testAccCheckDetectorFeatureExists(ctx, resourceName),
133+
resource.TestCheckResourceAttr(resourceName, "additional_configuration.#", "3"),
134+
resource.TestCheckTypeSetElemNestedAttrs(resourceName, "additional_configuration.*",
135+
map[string]string{"name": "EKS_ADDON_MANAGEMENT", "status": "ENABLED"}),
136+
resource.TestCheckTypeSetElemNestedAttrs(resourceName, "additional_configuration.*",
137+
map[string]string{"name": "EC2_AGENT_MANAGEMENT", "status": "ENABLED"}),
138+
resource.TestCheckTypeSetElemNestedAttrs(resourceName, "additional_configuration.*",
139+
map[string]string{"name": "ECS_FARGATE_AGENT_MANAGEMENT", "status": "ENABLED"}),
140+
),
141+
},
142+
},
143+
})
144+
}
145+
96146
func testAccDetectorFeature_multiple(t *testing.T) {
97147
ctx := acctest.Context(t)
98148
resource1Name := "aws_guardduty_detector_feature.test1"
@@ -211,6 +261,35 @@ resource "aws_guardduty_detector_feature" "test" {
211261
`, featureStatus, additionalConfigurationStatus)
212262
}
213263

264+
func testAccDetectorFeatureConfig_additionalConfiguration_multiple(configNames []string) string {
265+
return fmt.Sprintf(`
266+
resource "aws_guardduty_detector" "test" {
267+
enable = true
268+
}
269+
270+
resource "aws_guardduty_detector_feature" "test" {
271+
detector_id = aws_guardduty_detector.test.id
272+
name = "RUNTIME_MONITORING"
273+
status = "ENABLED"
274+
275+
additional_configuration {
276+
name = %[1]q
277+
status = "ENABLED"
278+
}
279+
280+
additional_configuration {
281+
name = %[2]q
282+
status = "ENABLED"
283+
}
284+
285+
additional_configuration {
286+
name = %[3]q
287+
status = "ENABLED"
288+
}
289+
}
290+
`, configNames[0], configNames[1], configNames[2])
291+
}
292+
214293
func testAccDetectorFeatureConfig_multiple(status1, status2, status3 string) string {
215294
return fmt.Sprintf(`
216295
resource "aws_guardduty_detector" "test" {

internal/service/guardduty/guardduty_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ func TestAccGuardDuty_serial(t *testing.T) {
2929
"datasource_id": testAccDetectorDataSource_ID,
3030
},
3131
"DetectorFeature": {
32-
"basic": testAccDetectorFeature_basic,
33-
"additional_configuration": testAccDetectorFeature_additionalConfiguration,
34-
"multiple": testAccDetectorFeature_multiple,
32+
"basic": testAccDetectorFeature_basic,
33+
"additional_configuration": testAccDetectorFeature_additionalConfiguration,
34+
"additional_configuration_order": testAccDetectorFeature_additionalConfigurationOrder,
35+
"multiple": testAccDetectorFeature_multiple,
3536
},
3637
"Filter": {
3738
"basic": testAccFilter_basic,

0 commit comments

Comments
 (0)