Skip to content

autoscaling: adds new capacity_reservation_specification argument #42380

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .archive/changelog/42380.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
resource/aws_autoscaling_group: Add `capacity_reservation_specification` argument
```
123 changes: 123 additions & 0 deletions internal/service/autoscaling/group.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,48 @@ func resourceGroup() *schema.Resource {
Type: schema.TypeBool,
Optional: true,
},
"capacity_reservation_specification": {
Type: schema.TypeList,
MaxItems: 1,
Optional: true,
Computed: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"capacity_reservation_preference": {
Type: schema.TypeString,
Optional: true,
Default: awstypes.CapacityReservationPreferenceDefault,
ValidateDiagFunc: enum.Validate[awstypes.CapacityReservationPreference](),
},
"capacity_reservation_target": {
Type: schema.TypeList,
MaxItems: 1,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"capacity_reservation_ids": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
ConflictsWith: []string{"capacity_reservation_specification.0.capacity_reservation_target.0.capacity_reservation_resource_group_arns"},
},
"capacity_reservation_resource_group_arns": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeString,
ValidateFunc: verify.ValidARN,
},
ConflictsWith: []string{"capacity_reservation_specification.0.capacity_reservation_target.0.capacity_reservation_ids"},
},
},
},
},
},
},
},
"context": {
Type: schema.TypeString,
Optional: true,
Expand Down Expand Up @@ -1094,6 +1136,10 @@ func resourceGroupCreate(ctx context.Context, d *schema.ResourceData, meta any)
inputCASG.AvailabilityZoneDistribution = expandAvailabilityZoneDistribution(v.([]any)[0].(map[string]any))
}

if v, ok := d.GetOk("capacity_reservation_specification"); ok && len(v.([]any)) > 0 && v.([]any)[0] != nil {
inputCASG.CapacityReservationSpecification = expandCapacityReservationSpecification(v.([]any)[0].(map[string]any))
}

if v, ok := d.GetOk("capacity_rebalance"); ok {
inputCASG.CapacityRebalance = aws.Bool(v.(bool))
}
Expand Down Expand Up @@ -1296,6 +1342,7 @@ func resourceGroupRead(ctx context.Context, d *schema.ResourceData, meta any) di
d.Set(names.AttrAvailabilityZones, g.AvailabilityZones)
d.Set("availability_zone_distribution", []any{flattenAvailabilityZoneDistribution(g.AvailabilityZoneDistribution)})
d.Set("capacity_rebalance", g.CapacityRebalance)
d.Set("capacity_reservation_specification", []any{flattenCapacityReservationSpecification(g.CapacityReservationSpecification)})
d.Set("context", g.Context)
d.Set("default_cooldown", g.DefaultCooldown)
d.Set("default_instance_warmup", g.DefaultInstanceWarmup)
Expand Down Expand Up @@ -1407,6 +1454,12 @@ func resourceGroupUpdate(ctx context.Context, d *schema.ResourceData, meta any)
}
}

if d.HasChange("capacity_reservation_specification") {
if v, ok := d.GetOk("capacity_reservation_specification"); ok && len(v.([]any)) > 0 && v.([]any)[0] != nil {
input.CapacityReservationSpecification = expandCapacityReservationSpecification(v.([]any)[0].(map[string]any))
}
}

if d.HasChange("capacity_rebalance") {
// If the capacity rebalance field is set to null, we need to explicitly set
// it back to "false", or the API won't reset it for us.
Expand Down Expand Up @@ -3412,6 +3465,42 @@ func expandAvailabilityZoneDistribution(tfMap map[string]any) *awstypes.Availabi
return apiObject
}

func expandCapacityReservationSpecification(tfMap map[string]any) *awstypes.CapacityReservationSpecification {
if tfMap == nil {
return nil
}

apiObject := &awstypes.CapacityReservationSpecification{}

if v, ok := tfMap["capacity_reservation_preference"].(string); ok && v != "" {
apiObject.CapacityReservationPreference = awstypes.CapacityReservationPreference(v)
}

if v, ok := tfMap["capacity_reservation_target"].([]any); ok && len(v) > 0 {
apiObject.CapacityReservationTarget = expandCapacityReservationTarget(v[0].(map[string]any))
}

return apiObject
}

func expandCapacityReservationTarget(tfMap map[string]any) *awstypes.CapacityReservationTarget {
if tfMap == nil {
return nil
}

apiObject := &awstypes.CapacityReservationTarget{}

if v, ok := tfMap["capacity_reservation_ids"].([]any); ok && len(v) > 0 {
apiObject.CapacityReservationIds = flex.ExpandStringValueList(v)
}

if v, ok := tfMap["capacity_reservation_resource_group_arns"].([]any); ok && len(v) > 0 {
apiObject.CapacityReservationResourceGroupArns = flex.ExpandStringValueList(v)
}

return apiObject
}

func expandTrafficSourceIdentifier(tfMap map[string]any) awstypes.TrafficSourceIdentifier {
apiObject := awstypes.TrafficSourceIdentifier{}

Expand Down Expand Up @@ -3460,6 +3549,40 @@ func flattenAvailabilityZoneDistribution(apiObject *awstypes.AvailabilityZoneDis
return tfMap
}

func flattenCapacityReservationSpecification(apiObject *awstypes.CapacityReservationSpecification) map[string]any {
if apiObject == nil {
return nil
}

tfMap := map[string]any{}
if v := apiObject.CapacityReservationPreference; v != "" {
tfMap["capacity_reservation_preference"] = string(v)
}

if v := apiObject.CapacityReservationTarget; v != nil {
tfMap["capacity_reservation_target"] = []any{flattenCapacityReservationTarget(v)}
}

return tfMap
}

func flattenCapacityReservationTarget(apiObject *awstypes.CapacityReservationTarget) map[string]any {
if apiObject == nil {
return nil
}

tfMap := map[string]any{}
if v := apiObject.CapacityReservationIds; len(v) > 0 {
tfMap["capacity_reservation_ids"] = v
}

if v := apiObject.CapacityReservationResourceGroupArns; len(v) > 0 {
tfMap["capacity_reservation_resource_group_arns"] = v
}

return tfMap
}

func flattenEnabledMetrics(apiObjects []awstypes.EnabledMetric) []string {
var tfList []string

Expand Down
Loading
Loading