diff --git a/builtin/providers/aws/resource_aws_autoscaling_group.go b/builtin/providers/aws/resource_aws_autoscaling_group.go index f457e6dcd1bf..4f166ce50350 100644 --- a/builtin/providers/aws/resource_aws_autoscaling_group.go +++ b/builtin/providers/aws/resource_aws_autoscaling_group.go @@ -95,6 +95,11 @@ func resourceAwsAutoscalingGroup() *schema.Resource { Set: schema.HashString, }, + "placement_group": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + }, + "load_balancers": &schema.Schema{ Type: schema.TypeSet, Optional: true, @@ -175,6 +180,10 @@ func resourceAwsAutoscalingGroupCreate(d *schema.ResourceData, meta interface{}) autoScalingGroupOpts.HealthCheckGracePeriod = aws.Int64(int64(v.(int))) } + if v, ok := d.GetOk("placement_group"); ok { + autoScalingGroupOpts.PlacementGroup = aws.String(v.(string)) + } + if v, ok := d.GetOk("load_balancers"); ok && v.(*schema.Set).Len() > 0 { autoScalingGroupOpts.LoadBalancerNames = expandStringList( v.(*schema.Set).List()) @@ -222,6 +231,7 @@ func resourceAwsAutoscalingGroupRead(d *schema.ResourceData, meta interface{}) e d.Set("load_balancers", g.LoadBalancerNames) d.Set("min_size", g.MinSize) d.Set("max_size", g.MaxSize) + d.Set("placement_group", g.PlacementGroup) d.Set("name", g.AutoScalingGroupName) d.Set("tag", g.Tags) d.Set("vpc_zone_identifier", strings.Split(*g.VPCZoneIdentifier, ",")) @@ -276,6 +286,10 @@ func resourceAwsAutoscalingGroupUpdate(d *schema.ResourceData, meta interface{}) } } + if d.HasChange("placement_group") { + opts.PlacementGroup = aws.String(d.Get("placement_group").(string)) + } + if d.HasChange("termination_policies") { // If the termination policy is set to null, we need to explicitly set // it back to "Default", or the API won't reset it for us. diff --git a/builtin/providers/aws/resource_aws_autoscaling_group_test.go b/builtin/providers/aws/resource_aws_autoscaling_group_test.go index 1a25c9dea9dd..43f5350be2f1 100644 --- a/builtin/providers/aws/resource_aws_autoscaling_group_test.go +++ b/builtin/providers/aws/resource_aws_autoscaling_group_test.go @@ -48,6 +48,8 @@ func TestAccAWSAutoScalingGroup_basic(t *testing.T) { "aws_autoscaling_group.bar", "termination_policies.0", "OldestInstance"), resource.TestCheckResourceAttr( "aws_autoscaling_group.bar", "termination_policies.1", "ClosestToNextInstanceHour"), + resource.TestCheckResourceAttr( + "aws_autoscaling_group.bar", "placement_group", "test"), ), }, @@ -354,6 +356,11 @@ resource "aws_launch_configuration" "foobar" { instance_type = "t1.micro" } +resource "aws_placement_group" "test" { + name = "test" + strategy = "cluster" +} + resource "aws_autoscaling_group" "bar" { availability_zones = ["us-west-2a"] name = "foobar3-terraform-test" @@ -364,6 +371,7 @@ resource "aws_autoscaling_group" "bar" { desired_capacity = 4 force_delete = true termination_policies = ["OldestInstance","ClosestToNextInstanceHour"] + placement_group = "${aws_placement_group.test.name}" launch_configuration = "${aws_launch_configuration.foobar.name}" diff --git a/website/source/docs/providers/aws/r/autoscaling_group.html.markdown b/website/source/docs/providers/aws/r/autoscaling_group.html.markdown index 7cb1661426c6..290bcabbed28 100644 --- a/website/source/docs/providers/aws/r/autoscaling_group.html.markdown +++ b/website/source/docs/providers/aws/r/autoscaling_group.html.markdown @@ -13,6 +13,11 @@ Provides an AutoScaling Group resource. ## Example Usage ``` +resource "aws_placement_group" "test" { + name = "test" + strategy = "cluster" +} + resource "aws_autoscaling_group" "bar" { availability_zones = ["us-east-1a"] name = "foobar3-terraform-test" @@ -22,6 +27,7 @@ resource "aws_autoscaling_group" "bar" { health_check_type = "ELB" desired_capacity = 4 force_delete = true + placement_group = "${aws_placement_group.test.id}" launch_configuration = "${aws_launch_configuration.foobar.name}" tag { @@ -48,7 +54,7 @@ The following arguments are supported: * `availability_zones` - (Optional) A list of AZs to launch resources in. Required only if you do not specify any `vpc_zone_identifier` * `launch_configuration` - (Required) The name of the launch configuration to use. -* `health_check_grace_period` - (Optional) Time after instance comes into service before checking health. +* `health_check_grace_period` - (Optional) Time after instance comes into service before checking health. * `health_check_type` - (Optional) "EC2" or "ELB". Controls how health checking is done. * `desired_capacity` - (Optional) The number of Amazon EC2 instances that should be running in the group. (See also [Waiting for @@ -66,6 +72,7 @@ The following arguments are supported: * `vpc_zone_identifier` (Optional) A list of subnet IDs to launch resources in. * `termination_policies` (Optional) A list of policies to decide how the instances in the auto scale group should be terminated. * `tag` (Optional) A list of tag blocks. Tags documented below. +* `placement_group` (Optional) The name of the placement group into which you'll launch your instances, if any. * `wait_for_capacity_timeout` (Default: "10m") A maximum [duration](https://golang.org/pkg/time/#ParseDuration) that Terraform should wait for ASG instances to be healthy before timing out. (See also [Waiting