Skip to content

Commit a2b935c

Browse files
authored
Merge pull request #22805 from hashicorp/f-aws_batch_compute_environment-no-compute_resources-when-UNMANAGED
r/aws_batch_compute_environment: Enforce no `compute_resources` block for `UNMANAGED` compute environments
2 parents 18aa232 + 1ccf664 commit a2b935c

File tree

3 files changed

+19
-34
lines changed

3 files changed

+19
-34
lines changed

.changelog/22805.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:breaking-change
2+
resource/aws_batch_compute_environment: No `compute_resources` configuration block can be specified when `type` is `UNMANAGED`
3+
```

internal/service/batch/compute_environment.go

+14-15
Original file line numberDiff line numberDiff line change
@@ -248,12 +248,8 @@ func resourceComputeEnvironmentCreate(d *schema.ResourceData, meta interface{})
248248
Type: aws.String(computeEnvironmentType),
249249
}
250250

251-
// TODO Check in CustomizeDiff that UNMANAGED compute environment has no compute_resources.
252-
// TODO This would be a breaking change.
253-
if computeEnvironmentType := strings.ToUpper(computeEnvironmentType); computeEnvironmentType == batch.CETypeManaged {
254-
if v, ok := d.GetOk("compute_resources"); ok && len(v.([]interface{})) > 0 && v.([]interface{})[0] != nil {
255-
input.ComputeResources = expandBatchComputeResource(v.([]interface{})[0].(map[string]interface{}))
256-
}
251+
if v, ok := d.GetOk("compute_resources"); ok && len(v.([]interface{})) > 0 && v.([]interface{})[0] != nil {
252+
input.ComputeResources = expandBatchComputeResource(v.([]interface{})[0].(map[string]interface{}))
257253
}
258254

259255
if v, ok := d.GetOk("state"); ok {
@@ -309,15 +305,12 @@ func resourceComputeEnvironmentRead(d *schema.ResourceData, meta interface{}) er
309305
d.Set("status_reason", computeEnvironment.StatusReason)
310306
d.Set("type", computeEnvironmentType)
311307

312-
// TODO See above on how to remove check on type.
313-
if computeEnvironmentType == batch.CETypeManaged {
314-
if computeEnvironment.ComputeResources != nil {
315-
if err := d.Set("compute_resources", []interface{}{flattenBatchComputeResource(computeEnvironment.ComputeResources)}); err != nil {
316-
return fmt.Errorf("error setting compute_resources: %w", err)
317-
}
318-
} else {
319-
d.Set("compute_resources", nil)
308+
if computeEnvironment.ComputeResources != nil {
309+
if err := d.Set("compute_resources", []interface{}{flattenBatchComputeResource(computeEnvironment.ComputeResources)}); err != nil {
310+
return fmt.Errorf("error setting compute_resources: %w", err)
320311
}
312+
} else {
313+
d.Set("compute_resources", nil)
321314
}
322315

323316
tags := KeyValueTags(computeEnvironment.Tags).IgnoreAWS().IgnoreConfig(ignoreTagsConfig)
@@ -350,7 +343,6 @@ func resourceComputeEnvironmentUpdate(d *schema.ResourceData, meta interface{})
350343
input.State = aws.String(d.Get("state").(string))
351344
}
352345

353-
// TODO See above on how to remove check on type.
354346
if computeEnvironmentType := strings.ToUpper(d.Get("type").(string)); computeEnvironmentType == batch.CETypeManaged {
355347
// "At least one compute-resources attribute must be specified"
356348
computeResourceUpdate := &batch.ComputeResourceUpdate{
@@ -435,6 +427,13 @@ func resourceComputeEnvironmentDelete(d *schema.ResourceData, meta interface{})
435427
}
436428

437429
func resourceComputeEnvironmentCustomizeDiff(_ context.Context, diff *schema.ResourceDiff, meta interface{}) error {
430+
if computeEnvironmentType := strings.ToUpper(diff.Get("type").(string)); computeEnvironmentType == batch.CETypeUnmanaged {
431+
// UNMANAGED compute environments can have no compute_resources configured.
432+
if v, ok := diff.GetOk("compute_resources"); ok && len(v.([]interface{})) > 0 && v.([]interface{})[0] != nil {
433+
return fmt.Errorf("no `compute_resources` can be specified when `type` is %q", computeEnvironmentType)
434+
}
435+
}
436+
438437
if diff.Id() != "" {
439438
// Update.
440439

internal/service/batch/compute_environment_test.go

+2-19
Original file line numberDiff line numberDiff line change
@@ -1324,10 +1324,7 @@ func TestAccBatchComputeEnvironment_tags(t *testing.T) {
13241324
}
13251325

13261326
func TestAccBatchComputeEnvironment_createUnmanagedWithComputeResources(t *testing.T) {
1327-
var ce batch.ComputeEnvironmentDetail
13281327
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
1329-
resourceName := "aws_batch_compute_environment.test"
1330-
serviceRoleResourceName := "aws_iam_role.batch_service"
13311328

13321329
resource.ParallelTest(t, resource.TestCase{
13331330
PreCheck: func() { acctest.PreCheck(t); testAccPreCheck(t) },
@@ -1336,23 +1333,9 @@ func TestAccBatchComputeEnvironment_createUnmanagedWithComputeResources(t *testi
13361333
CheckDestroy: testAccCheckBatchComputeEnvironmentDestroy,
13371334
Steps: []resource.TestStep{
13381335
{
1339-
Config: testAccComputeEnvironmentUnmanagedWithComputeResourcesConfig(rName),
1340-
Check: resource.ComposeTestCheckFunc(
1341-
testAccCheckComputeEnvironmentExists(resourceName, &ce),
1342-
acctest.CheckResourceAttrRegionalARN(resourceName, "arn", "batch", fmt.Sprintf("compute-environment/%s", rName)),
1343-
resource.TestCheckResourceAttr(resourceName, "compute_environment_name", rName),
1344-
resource.TestCheckResourceAttr(resourceName, "compute_environment_name_prefix", ""),
1345-
resource.TestCheckResourceAttr(resourceName, "compute_resources.#", "1"),
1346-
resource.TestCheckResourceAttrSet(resourceName, "ecs_cluster_arn"),
1347-
resource.TestCheckResourceAttrPair(resourceName, "service_role", serviceRoleResourceName, "arn"),
1348-
resource.TestCheckResourceAttr(resourceName, "state", "ENABLED"),
1349-
resource.TestCheckResourceAttrSet(resourceName, "status"),
1350-
resource.TestCheckResourceAttrSet(resourceName, "status_reason"),
1351-
resource.TestCheckResourceAttr(resourceName, "tags.%", "0"),
1352-
resource.TestCheckResourceAttr(resourceName, "type", "UNMANAGED"),
1353-
),
1336+
Config: testAccComputeEnvironmentUnmanagedWithComputeResourcesConfig(rName),
1337+
ExpectError: regexp.MustCompile("no `compute_resources` can be specified when `type` is \"UNMANAGED\""),
13541338
},
1355-
// Can't import in this scenario.
13561339
},
13571340
})
13581341
}

0 commit comments

Comments
 (0)