github.com/subuk/terraform@v0.6.14-0.20160317140351-de1567c2e732/builtin/providers/aws/resource_aws_autoscaling_group_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "reflect" 6 "regexp" 7 "strings" 8 "testing" 9 10 "github.com/aws/aws-sdk-go/aws" 11 "github.com/aws/aws-sdk-go/aws/awserr" 12 "github.com/aws/aws-sdk-go/service/autoscaling" 13 "github.com/hashicorp/terraform/helper/resource" 14 "github.com/hashicorp/terraform/terraform" 15 ) 16 17 func TestAccAWSAutoScalingGroup_basic(t *testing.T) { 18 var group autoscaling.Group 19 var lc autoscaling.LaunchConfiguration 20 21 resource.Test(t, resource.TestCase{ 22 PreCheck: func() { testAccPreCheck(t) }, 23 Providers: testAccProviders, 24 CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy, 25 Steps: []resource.TestStep{ 26 resource.TestStep{ 27 Config: testAccAWSAutoScalingGroupConfig, 28 Check: resource.ComposeTestCheckFunc( 29 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 30 testAccCheckAWSAutoScalingGroupHealthyCapacity(&group, 2), 31 testAccCheckAWSAutoScalingGroupAttributes(&group), 32 resource.TestCheckResourceAttr( 33 "aws_autoscaling_group.bar", "availability_zones.2487133097", "us-west-2a"), 34 resource.TestCheckResourceAttr( 35 "aws_autoscaling_group.bar", "name", "foobar3-terraform-test"), 36 resource.TestCheckResourceAttr( 37 "aws_autoscaling_group.bar", "max_size", "5"), 38 resource.TestCheckResourceAttr( 39 "aws_autoscaling_group.bar", "min_size", "2"), 40 resource.TestCheckResourceAttr( 41 "aws_autoscaling_group.bar", "health_check_grace_period", "300"), 42 resource.TestCheckResourceAttr( 43 "aws_autoscaling_group.bar", "health_check_type", "ELB"), 44 resource.TestCheckResourceAttr( 45 "aws_autoscaling_group.bar", "desired_capacity", "4"), 46 resource.TestCheckResourceAttr( 47 "aws_autoscaling_group.bar", "force_delete", "true"), 48 resource.TestCheckResourceAttr( 49 "aws_autoscaling_group.bar", "termination_policies.0", "OldestInstance"), 50 resource.TestCheckResourceAttr( 51 "aws_autoscaling_group.bar", "termination_policies.1", "ClosestToNextInstanceHour"), 52 ), 53 }, 54 55 resource.TestStep{ 56 Config: testAccAWSAutoScalingGroupConfigUpdate, 57 Check: resource.ComposeTestCheckFunc( 58 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 59 testAccCheckAWSLaunchConfigurationExists("aws_launch_configuration.new", &lc), 60 resource.TestCheckResourceAttr( 61 "aws_autoscaling_group.bar", "desired_capacity", "5"), 62 resource.TestCheckResourceAttr( 63 "aws_autoscaling_group.bar", "termination_policies.0", "ClosestToNextInstanceHour"), 64 testLaunchConfigurationName("aws_autoscaling_group.bar", &lc), 65 testAccCheckAutoscalingTags(&group.Tags, "Bar", map[string]interface{}{ 66 "value": "bar-foo", 67 "propagate_at_launch": true, 68 }), 69 ), 70 }, 71 }, 72 }) 73 } 74 75 func TestAccAWSAutoScalingGroup_autoGeneratedName(t *testing.T) { 76 asgNameRegexp := regexp.MustCompile("^tf-asg-") 77 78 resource.Test(t, resource.TestCase{ 79 PreCheck: func() { testAccPreCheck(t) }, 80 Providers: testAccProviders, 81 CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy, 82 Steps: []resource.TestStep{ 83 resource.TestStep{ 84 Config: testAccAWSAutoScalingGroupConfig_autoGeneratedName, 85 Check: resource.ComposeTestCheckFunc( 86 resource.TestMatchResourceAttr( 87 "aws_autoscaling_group.bar", "name", asgNameRegexp), 88 ), 89 }, 90 }, 91 }) 92 } 93 94 func TestAccAWSAutoScalingGroup_terminationPolicies(t *testing.T) { 95 resource.Test(t, resource.TestCase{ 96 PreCheck: func() { testAccPreCheck(t) }, 97 Providers: testAccProviders, 98 CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy, 99 Steps: []resource.TestStep{ 100 resource.TestStep{ 101 Config: testAccAWSAutoScalingGroupConfig_terminationPoliciesEmpty, 102 Check: resource.ComposeTestCheckFunc( 103 resource.TestCheckResourceAttr( 104 "aws_autoscaling_group.bar", "termination_policies.#", "0"), 105 ), 106 }, 107 108 resource.TestStep{ 109 Config: testAccAWSAutoScalingGroupConfig_terminationPoliciesUpdate, 110 Check: resource.ComposeTestCheckFunc( 111 resource.TestCheckResourceAttr( 112 "aws_autoscaling_group.bar", "termination_policies.#", "1"), 113 resource.TestCheckResourceAttr( 114 "aws_autoscaling_group.bar", "termination_policies.0", "OldestInstance"), 115 ), 116 }, 117 118 resource.TestStep{ 119 Config: testAccAWSAutoScalingGroupConfig_terminationPoliciesExplicitDefault, 120 Check: resource.ComposeTestCheckFunc( 121 resource.TestCheckResourceAttr( 122 "aws_autoscaling_group.bar", "termination_policies.#", "1"), 123 resource.TestCheckResourceAttr( 124 "aws_autoscaling_group.bar", "termination_policies.0", "Default"), 125 ), 126 }, 127 128 resource.TestStep{ 129 Config: testAccAWSAutoScalingGroupConfig_terminationPoliciesEmpty, 130 Check: resource.ComposeTestCheckFunc( 131 resource.TestCheckResourceAttr( 132 "aws_autoscaling_group.bar", "termination_policies.#", "0"), 133 ), 134 }, 135 }, 136 }) 137 } 138 139 func TestAccAWSAutoScalingGroup_tags(t *testing.T) { 140 var group autoscaling.Group 141 142 resource.Test(t, resource.TestCase{ 143 PreCheck: func() { testAccPreCheck(t) }, 144 Providers: testAccProviders, 145 CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy, 146 Steps: []resource.TestStep{ 147 resource.TestStep{ 148 Config: testAccAWSAutoScalingGroupConfig, 149 Check: resource.ComposeTestCheckFunc( 150 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 151 testAccCheckAutoscalingTags(&group.Tags, "Foo", map[string]interface{}{ 152 "value": "foo-bar", 153 "propagate_at_launch": true, 154 }), 155 ), 156 }, 157 158 resource.TestStep{ 159 Config: testAccAWSAutoScalingGroupConfigUpdate, 160 Check: resource.ComposeTestCheckFunc( 161 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 162 testAccCheckAutoscalingTagNotExists(&group.Tags, "Foo"), 163 testAccCheckAutoscalingTags(&group.Tags, "Bar", map[string]interface{}{ 164 "value": "bar-foo", 165 "propagate_at_launch": true, 166 }), 167 ), 168 }, 169 }, 170 }) 171 } 172 173 func TestAccAWSAutoScalingGroup_VpcUpdates(t *testing.T) { 174 var group autoscaling.Group 175 176 resource.Test(t, resource.TestCase{ 177 PreCheck: func() { testAccPreCheck(t) }, 178 Providers: testAccProviders, 179 CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy, 180 Steps: []resource.TestStep{ 181 resource.TestStep{ 182 Config: testAccAWSAutoScalingGroupConfigWithAZ, 183 Check: resource.ComposeTestCheckFunc( 184 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 185 resource.TestCheckResourceAttr( 186 "aws_autoscaling_group.bar", "availability_zones.#", "1"), 187 resource.TestCheckResourceAttr( 188 "aws_autoscaling_group.bar", "availability_zones.2487133097", "us-west-2a"), 189 resource.TestCheckResourceAttr( 190 "aws_autoscaling_group.bar", "vpc_zone_identifier.#", "1"), 191 ), 192 }, 193 194 resource.TestStep{ 195 Config: testAccAWSAutoScalingGroupConfigWithVPCIdent, 196 Check: resource.ComposeTestCheckFunc( 197 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 198 testAccCheckAWSAutoScalingGroupAttributesVPCZoneIdentifer(&group), 199 resource.TestCheckResourceAttr( 200 "aws_autoscaling_group.bar", "availability_zones.#", "1"), 201 resource.TestCheckResourceAttr( 202 "aws_autoscaling_group.bar", "availability_zones.2487133097", "us-west-2a"), 203 resource.TestCheckResourceAttr( 204 "aws_autoscaling_group.bar", "vpc_zone_identifier.#", "1"), 205 ), 206 }, 207 }, 208 }) 209 } 210 211 func TestAccAWSAutoScalingGroup_WithLoadBalancer(t *testing.T) { 212 var group autoscaling.Group 213 214 resource.Test(t, resource.TestCase{ 215 PreCheck: func() { testAccPreCheck(t) }, 216 Providers: testAccProviders, 217 CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy, 218 Steps: []resource.TestStep{ 219 resource.TestStep{ 220 Config: fmt.Sprintf(testAccAWSAutoScalingGroupConfigWithLoadBalancer), 221 Check: resource.ComposeTestCheckFunc( 222 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 223 testAccCheckAWSAutoScalingGroupAttributesLoadBalancer(&group), 224 ), 225 }, 226 }, 227 }) 228 } 229 230 func TestAccAWSAutoScalingGroup_withPlacementGroup(t *testing.T) { 231 var group autoscaling.Group 232 233 resource.Test(t, resource.TestCase{ 234 PreCheck: func() { testAccPreCheck(t) }, 235 Providers: testAccProviders, 236 CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy, 237 Steps: []resource.TestStep{ 238 resource.TestStep{ 239 Config: testAccAWSAutoScalingGroupConfig_withPlacementGroup, 240 Check: resource.ComposeTestCheckFunc( 241 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 242 resource.TestCheckResourceAttr( 243 "aws_autoscaling_group.bar", "placement_group", "tf_placement_test"), 244 ), 245 }, 246 }, 247 }) 248 } 249 250 func TestAccAWSAutoScalingGroup_withMetrics(t *testing.T) { 251 var group autoscaling.Group 252 253 resource.Test(t, resource.TestCase{ 254 PreCheck: func() { testAccPreCheck(t) }, 255 Providers: testAccProviders, 256 CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy, 257 Steps: []resource.TestStep{ 258 resource.TestStep{ 259 Config: testAccAWSAutoscalingMetricsCollectionConfig_allMetricsCollected, 260 Check: resource.ComposeTestCheckFunc( 261 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 262 resource.TestCheckResourceAttr( 263 "aws_autoscaling_group.bar", "enabled_metrics.#", "7"), 264 ), 265 }, 266 267 resource.TestStep{ 268 Config: testAccAWSAutoscalingMetricsCollectionConfig_updatingMetricsCollected, 269 Check: resource.ComposeTestCheckFunc( 270 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 271 resource.TestCheckResourceAttr( 272 "aws_autoscaling_group.bar", "enabled_metrics.#", "5"), 273 ), 274 }, 275 }, 276 }) 277 } 278 279 func testAccCheckAWSAutoScalingGroupDestroy(s *terraform.State) error { 280 conn := testAccProvider.Meta().(*AWSClient).autoscalingconn 281 282 for _, rs := range s.RootModule().Resources { 283 if rs.Type != "aws_autoscaling_group" { 284 continue 285 } 286 287 // Try to find the Group 288 describeGroups, err := conn.DescribeAutoScalingGroups( 289 &autoscaling.DescribeAutoScalingGroupsInput{ 290 AutoScalingGroupNames: []*string{aws.String(rs.Primary.ID)}, 291 }) 292 293 if err == nil { 294 if len(describeGroups.AutoScalingGroups) != 0 && 295 *describeGroups.AutoScalingGroups[0].AutoScalingGroupName == rs.Primary.ID { 296 return fmt.Errorf("AutoScaling Group still exists") 297 } 298 } 299 300 // Verify the error 301 ec2err, ok := err.(awserr.Error) 302 if !ok { 303 return err 304 } 305 if ec2err.Code() != "InvalidGroup.NotFound" { 306 return err 307 } 308 } 309 310 return nil 311 } 312 313 func testAccCheckAWSAutoScalingGroupAttributes(group *autoscaling.Group) resource.TestCheckFunc { 314 return func(s *terraform.State) error { 315 if *group.AvailabilityZones[0] != "us-west-2a" { 316 return fmt.Errorf("Bad availability_zones: %#v", group.AvailabilityZones[0]) 317 } 318 319 if *group.AutoScalingGroupName != "foobar3-terraform-test" { 320 return fmt.Errorf("Bad name: %s", *group.AutoScalingGroupName) 321 } 322 323 if *group.MaxSize != 5 { 324 return fmt.Errorf("Bad max_size: %d", *group.MaxSize) 325 } 326 327 if *group.MinSize != 2 { 328 return fmt.Errorf("Bad max_size: %d", *group.MinSize) 329 } 330 331 if *group.HealthCheckType != "ELB" { 332 return fmt.Errorf("Bad health_check_type,\nexpected: %s\ngot: %s", "ELB", *group.HealthCheckType) 333 } 334 335 if *group.HealthCheckGracePeriod != 300 { 336 return fmt.Errorf("Bad health_check_grace_period: %d", *group.HealthCheckGracePeriod) 337 } 338 339 if *group.DesiredCapacity != 4 { 340 return fmt.Errorf("Bad desired_capacity: %d", *group.DesiredCapacity) 341 } 342 343 if *group.LaunchConfigurationName == "" { 344 return fmt.Errorf("Bad launch configuration name: %s", *group.LaunchConfigurationName) 345 } 346 347 t := &autoscaling.TagDescription{ 348 Key: aws.String("Foo"), 349 Value: aws.String("foo-bar"), 350 PropagateAtLaunch: aws.Bool(true), 351 ResourceType: aws.String("auto-scaling-group"), 352 ResourceId: group.AutoScalingGroupName, 353 } 354 355 if !reflect.DeepEqual(group.Tags[0], t) { 356 return fmt.Errorf( 357 "Got:\n\n%#v\n\nExpected:\n\n%#v\n", 358 group.Tags[0], 359 t) 360 } 361 362 return nil 363 } 364 } 365 366 func testAccCheckAWSAutoScalingGroupAttributesLoadBalancer(group *autoscaling.Group) resource.TestCheckFunc { 367 return func(s *terraform.State) error { 368 if len(group.LoadBalancerNames) != 1 { 369 return fmt.Errorf("Bad load_balancers: %v", group.LoadBalancerNames) 370 } 371 372 return nil 373 } 374 } 375 376 func testAccCheckAWSAutoScalingGroupExists(n string, group *autoscaling.Group) resource.TestCheckFunc { 377 return func(s *terraform.State) error { 378 rs, ok := s.RootModule().Resources[n] 379 if !ok { 380 return fmt.Errorf("Not found: %s", n) 381 } 382 383 if rs.Primary.ID == "" { 384 return fmt.Errorf("No AutoScaling Group ID is set") 385 } 386 387 conn := testAccProvider.Meta().(*AWSClient).autoscalingconn 388 389 describeGroups, err := conn.DescribeAutoScalingGroups( 390 &autoscaling.DescribeAutoScalingGroupsInput{ 391 AutoScalingGroupNames: []*string{aws.String(rs.Primary.ID)}, 392 }) 393 394 if err != nil { 395 return err 396 } 397 398 if len(describeGroups.AutoScalingGroups) != 1 || 399 *describeGroups.AutoScalingGroups[0].AutoScalingGroupName != rs.Primary.ID { 400 return fmt.Errorf("AutoScaling Group not found") 401 } 402 403 *group = *describeGroups.AutoScalingGroups[0] 404 405 return nil 406 } 407 } 408 409 func testLaunchConfigurationName(n string, lc *autoscaling.LaunchConfiguration) resource.TestCheckFunc { 410 return func(s *terraform.State) error { 411 rs, ok := s.RootModule().Resources[n] 412 if !ok { 413 return fmt.Errorf("Not found: %s", n) 414 } 415 416 if *lc.LaunchConfigurationName != rs.Primary.Attributes["launch_configuration"] { 417 return fmt.Errorf("Launch configuration names do not match") 418 } 419 420 return nil 421 } 422 } 423 424 func testAccCheckAWSAutoScalingGroupHealthyCapacity( 425 g *autoscaling.Group, exp int) resource.TestCheckFunc { 426 return func(s *terraform.State) error { 427 healthy := 0 428 for _, i := range g.Instances { 429 if i.HealthStatus == nil { 430 continue 431 } 432 if strings.EqualFold(*i.HealthStatus, "Healthy") { 433 healthy++ 434 } 435 } 436 if healthy < exp { 437 return fmt.Errorf("Expected at least %d healthy, got %d.", exp, healthy) 438 } 439 return nil 440 } 441 } 442 443 func testAccCheckAWSAutoScalingGroupAttributesVPCZoneIdentifer(group *autoscaling.Group) resource.TestCheckFunc { 444 return func(s *terraform.State) error { 445 // Grab Subnet Ids 446 var subnets []string 447 for _, rs := range s.RootModule().Resources { 448 if rs.Type != "aws_subnet" { 449 continue 450 } 451 subnets = append(subnets, rs.Primary.Attributes["id"]) 452 } 453 454 if group.VPCZoneIdentifier == nil { 455 return fmt.Errorf("Bad VPC Zone Identifier\nexpected: %s\ngot nil", subnets) 456 } 457 458 zones := strings.Split(*group.VPCZoneIdentifier, ",") 459 460 remaining := len(zones) 461 for _, z := range zones { 462 for _, s := range subnets { 463 if z == s { 464 remaining-- 465 } 466 } 467 } 468 469 if remaining != 0 { 470 return fmt.Errorf("Bad VPC Zone Identifier match\nexpected: %s\ngot:%s", zones, subnets) 471 } 472 473 return nil 474 } 475 } 476 477 const testAccAWSAutoScalingGroupConfig_autoGeneratedName = ` 478 resource "aws_launch_configuration" "foobar" { 479 image_id = "ami-21f78e11" 480 instance_type = "t1.micro" 481 } 482 483 resource "aws_autoscaling_group" "bar" { 484 availability_zones = ["us-west-2a"] 485 desired_capacity = 0 486 max_size = 0 487 min_size = 0 488 launch_configuration = "${aws_launch_configuration.foobar.name}" 489 } 490 ` 491 492 const testAccAWSAutoScalingGroupConfig_terminationPoliciesEmpty = ` 493 resource "aws_launch_configuration" "foobar" { 494 image_id = "ami-21f78e11" 495 instance_type = "t1.micro" 496 } 497 498 resource "aws_autoscaling_group" "bar" { 499 availability_zones = ["us-west-2a"] 500 max_size = 0 501 min_size = 0 502 desired_capacity = 0 503 504 launch_configuration = "${aws_launch_configuration.foobar.name}" 505 } 506 ` 507 508 const testAccAWSAutoScalingGroupConfig_terminationPoliciesExplicitDefault = ` 509 resource "aws_launch_configuration" "foobar" { 510 image_id = "ami-21f78e11" 511 instance_type = "t1.micro" 512 } 513 514 resource "aws_autoscaling_group" "bar" { 515 availability_zones = ["us-west-2a"] 516 max_size = 0 517 min_size = 0 518 desired_capacity = 0 519 termination_policies = ["Default"] 520 521 launch_configuration = "${aws_launch_configuration.foobar.name}" 522 } 523 ` 524 525 const testAccAWSAutoScalingGroupConfig_terminationPoliciesUpdate = ` 526 resource "aws_launch_configuration" "foobar" { 527 image_id = "ami-21f78e11" 528 instance_type = "t1.micro" 529 } 530 531 resource "aws_autoscaling_group" "bar" { 532 availability_zones = ["us-west-2a"] 533 max_size = 0 534 min_size = 0 535 desired_capacity = 0 536 termination_policies = ["OldestInstance"] 537 538 launch_configuration = "${aws_launch_configuration.foobar.name}" 539 } 540 ` 541 542 const testAccAWSAutoScalingGroupConfig = ` 543 resource "aws_launch_configuration" "foobar" { 544 image_id = "ami-21f78e11" 545 instance_type = "t1.micro" 546 } 547 548 resource "aws_placement_group" "test" { 549 name = "test" 550 strategy = "cluster" 551 } 552 553 resource "aws_autoscaling_group" "bar" { 554 availability_zones = ["us-west-2a"] 555 name = "foobar3-terraform-test" 556 max_size = 5 557 min_size = 2 558 health_check_grace_period = 300 559 health_check_type = "ELB" 560 desired_capacity = 4 561 force_delete = true 562 termination_policies = ["OldestInstance","ClosestToNextInstanceHour"] 563 564 launch_configuration = "${aws_launch_configuration.foobar.name}" 565 566 tag { 567 key = "Foo" 568 value = "foo-bar" 569 propagate_at_launch = true 570 } 571 } 572 ` 573 574 const testAccAWSAutoScalingGroupConfigUpdate = ` 575 resource "aws_launch_configuration" "foobar" { 576 image_id = "ami-21f78e11" 577 instance_type = "t1.micro" 578 } 579 580 resource "aws_launch_configuration" "new" { 581 image_id = "ami-21f78e11" 582 instance_type = "t1.micro" 583 } 584 585 resource "aws_autoscaling_group" "bar" { 586 availability_zones = ["us-west-2a"] 587 name = "foobar3-terraform-test" 588 max_size = 5 589 min_size = 2 590 health_check_grace_period = 300 591 health_check_type = "ELB" 592 desired_capacity = 5 593 force_delete = true 594 termination_policies = ["ClosestToNextInstanceHour"] 595 596 launch_configuration = "${aws_launch_configuration.new.name}" 597 598 tag { 599 key = "Bar" 600 value = "bar-foo" 601 propagate_at_launch = true 602 } 603 } 604 ` 605 606 const testAccAWSAutoScalingGroupConfigWithLoadBalancer = ` 607 resource "aws_vpc" "foo" { 608 cidr_block = "10.1.0.0/16" 609 tags { Name = "tf-asg-test" } 610 } 611 612 resource "aws_internet_gateway" "gw" { 613 vpc_id = "${aws_vpc.foo.id}" 614 } 615 616 resource "aws_subnet" "foo" { 617 cidr_block = "10.1.1.0/24" 618 vpc_id = "${aws_vpc.foo.id}" 619 } 620 621 resource "aws_security_group" "foo" { 622 vpc_id="${aws_vpc.foo.id}" 623 624 ingress { 625 protocol = "-1" 626 from_port = 0 627 to_port = 0 628 cidr_blocks = ["0.0.0.0/0"] 629 } 630 631 egress { 632 protocol = "-1" 633 from_port = 0 634 to_port = 0 635 cidr_blocks = ["0.0.0.0/0"] 636 } 637 } 638 639 resource "aws_elb" "bar" { 640 subnets = ["${aws_subnet.foo.id}"] 641 security_groups = ["${aws_security_group.foo.id}"] 642 643 listener { 644 instance_port = 80 645 instance_protocol = "http" 646 lb_port = 80 647 lb_protocol = "http" 648 } 649 650 health_check { 651 healthy_threshold = 2 652 unhealthy_threshold = 2 653 target = "HTTP:80/" 654 interval = 5 655 timeout = 2 656 } 657 658 depends_on = ["aws_internet_gateway.gw"] 659 } 660 661 resource "aws_launch_configuration" "foobar" { 662 // need an AMI that listens on :80 at boot, this is: 663 // bitnami-nginxstack-1.6.1-0-linux-ubuntu-14.04.1-x86_64-hvm-ebs-ami-99f5b1a9-3 664 image_id = "ami-b5b3fc85" 665 instance_type = "t2.micro" 666 security_groups = ["${aws_security_group.foo.id}"] 667 } 668 669 resource "aws_autoscaling_group" "bar" { 670 availability_zones = ["${aws_subnet.foo.availability_zone}"] 671 vpc_zone_identifier = ["${aws_subnet.foo.id}"] 672 name = "foobar3-terraform-test" 673 max_size = 2 674 min_size = 2 675 health_check_grace_period = 300 676 health_check_type = "ELB" 677 wait_for_elb_capacity = 2 678 force_delete = true 679 680 launch_configuration = "${aws_launch_configuration.foobar.name}" 681 load_balancers = ["${aws_elb.bar.name}"] 682 } 683 ` 684 685 const testAccAWSAutoScalingGroupConfigWithAZ = ` 686 resource "aws_vpc" "default" { 687 cidr_block = "10.0.0.0/16" 688 tags { 689 Name = "terraform-test" 690 } 691 } 692 693 resource "aws_subnet" "main" { 694 vpc_id = "${aws_vpc.default.id}" 695 cidr_block = "10.0.1.0/24" 696 availability_zone = "us-west-2a" 697 tags { 698 Name = "terraform-test" 699 } 700 } 701 702 resource "aws_launch_configuration" "foobar" { 703 image_id = "ami-b5b3fc85" 704 instance_type = "t2.micro" 705 } 706 707 resource "aws_autoscaling_group" "bar" { 708 availability_zones = [ 709 "us-west-2a" 710 ] 711 desired_capacity = 0 712 max_size = 0 713 min_size = 0 714 launch_configuration = "${aws_launch_configuration.foobar.name}" 715 } 716 ` 717 718 const testAccAWSAutoScalingGroupConfigWithVPCIdent = ` 719 resource "aws_vpc" "default" { 720 cidr_block = "10.0.0.0/16" 721 tags { 722 Name = "terraform-test" 723 } 724 } 725 726 resource "aws_subnet" "main" { 727 vpc_id = "${aws_vpc.default.id}" 728 cidr_block = "10.0.1.0/24" 729 availability_zone = "us-west-2a" 730 tags { 731 Name = "terraform-test" 732 } 733 } 734 735 resource "aws_launch_configuration" "foobar" { 736 image_id = "ami-b5b3fc85" 737 instance_type = "t2.micro" 738 } 739 740 resource "aws_autoscaling_group" "bar" { 741 vpc_zone_identifier = [ 742 "${aws_subnet.main.id}", 743 ] 744 desired_capacity = 0 745 max_size = 0 746 min_size = 0 747 launch_configuration = "${aws_launch_configuration.foobar.name}" 748 } 749 ` 750 751 const testAccAWSAutoScalingGroupConfig_withPlacementGroup = ` 752 resource "aws_launch_configuration" "foobar" { 753 image_id = "ami-21f78e11" 754 instance_type = "c3.large" 755 } 756 757 resource "aws_placement_group" "test" { 758 name = "tf_placement_test" 759 strategy = "cluster" 760 } 761 762 resource "aws_autoscaling_group" "bar" { 763 availability_zones = ["us-west-2a"] 764 name = "foobar3-terraform-test" 765 max_size = 1 766 min_size = 1 767 health_check_grace_period = 300 768 health_check_type = "ELB" 769 desired_capacity = 1 770 force_delete = true 771 termination_policies = ["OldestInstance","ClosestToNextInstanceHour"] 772 placement_group = "${aws_placement_group.test.name}" 773 774 launch_configuration = "${aws_launch_configuration.foobar.name}" 775 776 tag { 777 key = "Foo" 778 value = "foo-bar" 779 propagate_at_launch = true 780 } 781 } 782 ` 783 784 const testAccAWSAutoscalingMetricsCollectionConfig_allMetricsCollected = ` 785 resource "aws_launch_configuration" "foobar" { 786 image_id = "ami-21f78e11" 787 instance_type = "t1.micro" 788 } 789 790 resource "aws_autoscaling_group" "bar" { 791 availability_zones = ["us-west-2a"] 792 max_size = 1 793 min_size = 0 794 health_check_grace_period = 300 795 health_check_type = "EC2" 796 desired_capacity = 0 797 force_delete = true 798 termination_policies = ["OldestInstance","ClosestToNextInstanceHour"] 799 launch_configuration = "${aws_launch_configuration.foobar.name}" 800 enabled_metrics = ["GroupTotalInstances", 801 "GroupPendingInstances", 802 "GroupTerminatingInstances", 803 "GroupDesiredCapacity", 804 "GroupInServiceInstances", 805 "GroupMinSize", 806 "GroupMaxSize" 807 ] 808 metrics_granularity = "1Minute" 809 } 810 ` 811 812 const testAccAWSAutoscalingMetricsCollectionConfig_updatingMetricsCollected = ` 813 resource "aws_launch_configuration" "foobar" { 814 image_id = "ami-21f78e11" 815 instance_type = "t1.micro" 816 } 817 818 resource "aws_autoscaling_group" "bar" { 819 availability_zones = ["us-west-2a"] 820 max_size = 1 821 min_size = 0 822 health_check_grace_period = 300 823 health_check_type = "EC2" 824 desired_capacity = 0 825 force_delete = true 826 termination_policies = ["OldestInstance","ClosestToNextInstanceHour"] 827 launch_configuration = "${aws_launch_configuration.foobar.name}" 828 enabled_metrics = ["GroupTotalInstances", 829 "GroupPendingInstances", 830 "GroupTerminatingInstances", 831 "GroupDesiredCapacity", 832 "GroupMaxSize" 833 ] 834 metrics_granularity = "1Minute" 835 } 836 `