github.com/odise/terraform@v0.6.9-0.20160401223921-f7d1e0390da7/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_type = "ELB" 559 desired_capacity = 4 560 force_delete = true 561 termination_policies = ["OldestInstance","ClosestToNextInstanceHour"] 562 563 launch_configuration = "${aws_launch_configuration.foobar.name}" 564 565 tag { 566 key = "Foo" 567 value = "foo-bar" 568 propagate_at_launch = true 569 } 570 } 571 ` 572 573 const testAccAWSAutoScalingGroupConfigUpdate = ` 574 resource "aws_launch_configuration" "foobar" { 575 image_id = "ami-21f78e11" 576 instance_type = "t1.micro" 577 } 578 579 resource "aws_launch_configuration" "new" { 580 image_id = "ami-21f78e11" 581 instance_type = "t1.micro" 582 } 583 584 resource "aws_autoscaling_group" "bar" { 585 availability_zones = ["us-west-2a"] 586 name = "foobar3-terraform-test" 587 max_size = 5 588 min_size = 2 589 health_check_grace_period = 300 590 health_check_type = "ELB" 591 desired_capacity = 5 592 force_delete = true 593 termination_policies = ["ClosestToNextInstanceHour"] 594 595 launch_configuration = "${aws_launch_configuration.new.name}" 596 597 tag { 598 key = "Bar" 599 value = "bar-foo" 600 propagate_at_launch = true 601 } 602 } 603 ` 604 605 const testAccAWSAutoScalingGroupConfigWithLoadBalancer = ` 606 resource "aws_vpc" "foo" { 607 cidr_block = "10.1.0.0/16" 608 tags { Name = "tf-asg-test" } 609 } 610 611 resource "aws_internet_gateway" "gw" { 612 vpc_id = "${aws_vpc.foo.id}" 613 } 614 615 resource "aws_subnet" "foo" { 616 cidr_block = "10.1.1.0/24" 617 vpc_id = "${aws_vpc.foo.id}" 618 } 619 620 resource "aws_security_group" "foo" { 621 vpc_id="${aws_vpc.foo.id}" 622 623 ingress { 624 protocol = "-1" 625 from_port = 0 626 to_port = 0 627 cidr_blocks = ["0.0.0.0/0"] 628 } 629 630 egress { 631 protocol = "-1" 632 from_port = 0 633 to_port = 0 634 cidr_blocks = ["0.0.0.0/0"] 635 } 636 } 637 638 resource "aws_elb" "bar" { 639 subnets = ["${aws_subnet.foo.id}"] 640 security_groups = ["${aws_security_group.foo.id}"] 641 642 listener { 643 instance_port = 80 644 instance_protocol = "http" 645 lb_port = 80 646 lb_protocol = "http" 647 } 648 649 health_check { 650 healthy_threshold = 2 651 unhealthy_threshold = 2 652 target = "HTTP:80/" 653 interval = 5 654 timeout = 2 655 } 656 657 depends_on = ["aws_internet_gateway.gw"] 658 } 659 660 resource "aws_launch_configuration" "foobar" { 661 // need an AMI that listens on :80 at boot, this is: 662 // bitnami-nginxstack-1.6.1-0-linux-ubuntu-14.04.1-x86_64-hvm-ebs-ami-99f5b1a9-3 663 image_id = "ami-b5b3fc85" 664 instance_type = "t2.micro" 665 security_groups = ["${aws_security_group.foo.id}"] 666 } 667 668 resource "aws_autoscaling_group" "bar" { 669 availability_zones = ["${aws_subnet.foo.availability_zone}"] 670 vpc_zone_identifier = ["${aws_subnet.foo.id}"] 671 name = "foobar3-terraform-test" 672 max_size = 2 673 min_size = 2 674 health_check_grace_period = 300 675 health_check_type = "ELB" 676 wait_for_elb_capacity = 2 677 force_delete = true 678 679 launch_configuration = "${aws_launch_configuration.foobar.name}" 680 load_balancers = ["${aws_elb.bar.name}"] 681 } 682 ` 683 684 const testAccAWSAutoScalingGroupConfigWithAZ = ` 685 resource "aws_vpc" "default" { 686 cidr_block = "10.0.0.0/16" 687 tags { 688 Name = "terraform-test" 689 } 690 } 691 692 resource "aws_subnet" "main" { 693 vpc_id = "${aws_vpc.default.id}" 694 cidr_block = "10.0.1.0/24" 695 availability_zone = "us-west-2a" 696 tags { 697 Name = "terraform-test" 698 } 699 } 700 701 resource "aws_launch_configuration" "foobar" { 702 image_id = "ami-b5b3fc85" 703 instance_type = "t2.micro" 704 } 705 706 resource "aws_autoscaling_group" "bar" { 707 availability_zones = [ 708 "us-west-2a" 709 ] 710 desired_capacity = 0 711 max_size = 0 712 min_size = 0 713 launch_configuration = "${aws_launch_configuration.foobar.name}" 714 } 715 ` 716 717 const testAccAWSAutoScalingGroupConfigWithVPCIdent = ` 718 resource "aws_vpc" "default" { 719 cidr_block = "10.0.0.0/16" 720 tags { 721 Name = "terraform-test" 722 } 723 } 724 725 resource "aws_subnet" "main" { 726 vpc_id = "${aws_vpc.default.id}" 727 cidr_block = "10.0.1.0/24" 728 availability_zone = "us-west-2a" 729 tags { 730 Name = "terraform-test" 731 } 732 } 733 734 resource "aws_launch_configuration" "foobar" { 735 image_id = "ami-b5b3fc85" 736 instance_type = "t2.micro" 737 } 738 739 resource "aws_autoscaling_group" "bar" { 740 vpc_zone_identifier = [ 741 "${aws_subnet.main.id}", 742 ] 743 desired_capacity = 0 744 max_size = 0 745 min_size = 0 746 launch_configuration = "${aws_launch_configuration.foobar.name}" 747 } 748 ` 749 750 const testAccAWSAutoScalingGroupConfig_withPlacementGroup = ` 751 resource "aws_launch_configuration" "foobar" { 752 image_id = "ami-21f78e11" 753 instance_type = "c3.large" 754 } 755 756 resource "aws_placement_group" "test" { 757 name = "tf_placement_test" 758 strategy = "cluster" 759 } 760 761 resource "aws_autoscaling_group" "bar" { 762 availability_zones = ["us-west-2a"] 763 name = "foobar3-terraform-test" 764 max_size = 1 765 min_size = 1 766 health_check_grace_period = 300 767 health_check_type = "ELB" 768 desired_capacity = 1 769 force_delete = true 770 termination_policies = ["OldestInstance","ClosestToNextInstanceHour"] 771 placement_group = "${aws_placement_group.test.name}" 772 773 launch_configuration = "${aws_launch_configuration.foobar.name}" 774 775 tag { 776 key = "Foo" 777 value = "foo-bar" 778 propagate_at_launch = true 779 } 780 } 781 ` 782 783 const testAccAWSAutoscalingMetricsCollectionConfig_allMetricsCollected = ` 784 resource "aws_launch_configuration" "foobar" { 785 image_id = "ami-21f78e11" 786 instance_type = "t1.micro" 787 } 788 789 resource "aws_autoscaling_group" "bar" { 790 availability_zones = ["us-west-2a"] 791 max_size = 1 792 min_size = 0 793 health_check_grace_period = 300 794 health_check_type = "EC2" 795 desired_capacity = 0 796 force_delete = true 797 termination_policies = ["OldestInstance","ClosestToNextInstanceHour"] 798 launch_configuration = "${aws_launch_configuration.foobar.name}" 799 enabled_metrics = ["GroupTotalInstances", 800 "GroupPendingInstances", 801 "GroupTerminatingInstances", 802 "GroupDesiredCapacity", 803 "GroupInServiceInstances", 804 "GroupMinSize", 805 "GroupMaxSize" 806 ] 807 metrics_granularity = "1Minute" 808 } 809 ` 810 811 const testAccAWSAutoscalingMetricsCollectionConfig_updatingMetricsCollected = ` 812 resource "aws_launch_configuration" "foobar" { 813 image_id = "ami-21f78e11" 814 instance_type = "t1.micro" 815 } 816 817 resource "aws_autoscaling_group" "bar" { 818 availability_zones = ["us-west-2a"] 819 max_size = 1 820 min_size = 0 821 health_check_grace_period = 300 822 health_check_type = "EC2" 823 desired_capacity = 0 824 force_delete = true 825 termination_policies = ["OldestInstance","ClosestToNextInstanceHour"] 826 launch_configuration = "${aws_launch_configuration.foobar.name}" 827 enabled_metrics = ["GroupTotalInstances", 828 "GroupPendingInstances", 829 "GroupTerminatingInstances", 830 "GroupDesiredCapacity", 831 "GroupMaxSize" 832 ] 833 metrics_granularity = "1Minute" 834 } 835 `