github.com/bengesoff/terraform@v0.3.1-0.20141018223233-b25a53629922/builtin/providers/aws/resource_aws_autoscaling_group_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/hashicorp/terraform/helper/resource" 8 "github.com/hashicorp/terraform/terraform" 9 "github.com/mitchellh/goamz/autoscaling" 10 ) 11 12 func TestAccAWSAutoScalingGroup_basic(t *testing.T) { 13 var group autoscaling.AutoScalingGroup 14 15 resource.Test(t, resource.TestCase{ 16 PreCheck: func() { testAccPreCheck(t) }, 17 Providers: testAccProviders, 18 CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy, 19 Steps: []resource.TestStep{ 20 resource.TestStep{ 21 Config: testAccAWSAutoScalingGroupConfig, 22 Check: resource.ComposeTestCheckFunc( 23 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 24 testAccCheckAWSAutoScalingGroupAttributes(&group), 25 resource.TestCheckResourceAttr( 26 "aws_autoscaling_group.bar", "availability_zones.0", "us-west-2a"), 27 resource.TestCheckResourceAttr( 28 "aws_autoscaling_group.bar", "name", "foobar3-terraform-test"), 29 resource.TestCheckResourceAttr( 30 "aws_autoscaling_group.bar", "max_size", "5"), 31 resource.TestCheckResourceAttr( 32 "aws_autoscaling_group.bar", "min_size", "2"), 33 resource.TestCheckResourceAttr( 34 "aws_autoscaling_group.bar", "health_check_grace_period", "300"), 35 resource.TestCheckResourceAttr( 36 "aws_autoscaling_group.bar", "health_check_type", "ELB"), 37 resource.TestCheckResourceAttr( 38 "aws_autoscaling_group.bar", "desired_capacity", "4"), 39 resource.TestCheckResourceAttr( 40 "aws_autoscaling_group.bar", "force_delete", "true"), 41 ), 42 }, 43 44 resource.TestStep{ 45 Config: testAccAWSAutoScalingGroupConfigUpdate, 46 Check: resource.ComposeTestCheckFunc( 47 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 48 resource.TestCheckResourceAttr( 49 "aws_autoscaling_group.bar", "desired_capacity", "5"), 50 ), 51 }, 52 }, 53 }) 54 } 55 56 func TestAccAWSAutoScalingGroupWithLoadBalancer(t *testing.T) { 57 var group autoscaling.AutoScalingGroup 58 59 resource.Test(t, resource.TestCase{ 60 PreCheck: func() { testAccPreCheck(t) }, 61 Providers: testAccProviders, 62 CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy, 63 Steps: []resource.TestStep{ 64 resource.TestStep{ 65 Config: testAccAWSAutoScalingGroupConfigWithLoadBalancer, 66 Check: resource.ComposeTestCheckFunc( 67 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 68 testAccCheckAWSAutoScalingGroupAttributesLoadBalancer(&group), 69 ), 70 }, 71 }, 72 }) 73 } 74 func testAccCheckAWSAutoScalingGroupDestroy(s *terraform.State) error { 75 conn := testAccProvider.autoscalingconn 76 77 for _, rs := range s.RootModule().Resources { 78 if rs.Type != "aws_autoscaling_group" { 79 continue 80 } 81 82 // Try to find the Group 83 describeGroups, err := conn.DescribeAutoScalingGroups( 84 &autoscaling.DescribeAutoScalingGroups{ 85 Names: []string{rs.Primary.ID}, 86 }) 87 88 if err == nil { 89 if len(describeGroups.AutoScalingGroups) != 0 && 90 describeGroups.AutoScalingGroups[0].Name == rs.Primary.ID { 91 return fmt.Errorf("AutoScaling Group still exists") 92 } 93 } 94 95 // Verify the error 96 ec2err, ok := err.(*autoscaling.Error) 97 if !ok { 98 return err 99 } 100 if ec2err.Code != "InvalidGroup.NotFound" { 101 return err 102 } 103 } 104 105 return nil 106 } 107 108 func testAccCheckAWSAutoScalingGroupAttributes(group *autoscaling.AutoScalingGroup) resource.TestCheckFunc { 109 return func(s *terraform.State) error { 110 if group.AvailabilityZones[0] != "us-west-2a" { 111 return fmt.Errorf("Bad availability_zones: %s", group.AvailabilityZones[0]) 112 } 113 114 if group.Name != "foobar3-terraform-test" { 115 return fmt.Errorf("Bad name: %s", group.Name) 116 } 117 118 if group.MaxSize != 5 { 119 return fmt.Errorf("Bad max_size: %d", group.MaxSize) 120 } 121 122 if group.MinSize != 2 { 123 return fmt.Errorf("Bad max_size: %d", group.MinSize) 124 } 125 126 if group.HealthCheckType != "ELB" { 127 return fmt.Errorf("Bad health_check_type: %s", group.HealthCheckType) 128 } 129 130 if group.HealthCheckGracePeriod != 300 { 131 return fmt.Errorf("Bad health_check_grace_period: %d", group.HealthCheckGracePeriod) 132 } 133 134 if group.DesiredCapacity != 4 { 135 return fmt.Errorf("Bad desired_capacity: %d", group.DesiredCapacity) 136 } 137 138 if group.LaunchConfigurationName == "" { 139 return fmt.Errorf("Bad launch configuration name: %s", group.LaunchConfigurationName) 140 } 141 142 return nil 143 } 144 } 145 146 func testAccCheckAWSAutoScalingGroupAttributesLoadBalancer(group *autoscaling.AutoScalingGroup) resource.TestCheckFunc { 147 return func(s *terraform.State) error { 148 if group.LoadBalancerNames[0] != "foobar-terraform-test" { 149 return fmt.Errorf("Bad load_balancers: %s", group.LoadBalancerNames[0]) 150 } 151 152 return nil 153 } 154 } 155 156 func testAccCheckAWSAutoScalingGroupExists(n string, group *autoscaling.AutoScalingGroup) resource.TestCheckFunc { 157 return func(s *terraform.State) error { 158 rs, ok := s.RootModule().Resources[n] 159 if !ok { 160 return fmt.Errorf("Not found: %s", n) 161 } 162 163 if rs.Primary.ID == "" { 164 return fmt.Errorf("No AutoScaling Group ID is set") 165 } 166 167 conn := testAccProvider.autoscalingconn 168 169 describeOpts := autoscaling.DescribeAutoScalingGroups{ 170 Names: []string{rs.Primary.ID}, 171 } 172 describeGroups, err := conn.DescribeAutoScalingGroups(&describeOpts) 173 174 if err != nil { 175 return err 176 } 177 178 if len(describeGroups.AutoScalingGroups) != 1 || 179 describeGroups.AutoScalingGroups[0].Name != rs.Primary.ID { 180 return fmt.Errorf("AutoScaling Group not found") 181 } 182 183 *group = describeGroups.AutoScalingGroups[0] 184 185 return nil 186 } 187 } 188 189 const testAccAWSAutoScalingGroupConfig = ` 190 resource "aws_launch_configuration" "foobar" { 191 name = "foobarautoscaling-terraform-test" 192 image_id = "ami-21f78e11" 193 instance_type = "t1.micro" 194 } 195 196 resource "aws_autoscaling_group" "bar" { 197 availability_zones = ["us-west-2a"] 198 name = "foobar3-terraform-test" 199 max_size = 5 200 min_size = 2 201 health_check_grace_period = 300 202 health_check_type = "ELB" 203 desired_capacity = 4 204 force_delete = true 205 206 launch_configuration = "${aws_launch_configuration.foobar.name}" 207 } 208 ` 209 210 const testAccAWSAutoScalingGroupConfigUpdate = ` 211 resource "aws_launch_configuration" "foobar" { 212 name = "foobarautoscaling-terraform-test" 213 image_id = "ami-21f78e11" 214 instance_type = "t1.micro" 215 } 216 217 resource "aws_autoscaling_group" "bar" { 218 availability_zones = ["us-west-2a"] 219 name = "foobar3-terraform-test" 220 max_size = 5 221 min_size = 2 222 health_check_grace_period = 300 223 health_check_type = "ELB" 224 desired_capacity = 5 225 force_delete = true 226 227 launch_configuration = "${aws_launch_configuration.foobar.name}" 228 } 229 ` 230 231 const testAccAWSAutoScalingGroupConfigWithLoadBalancer = ` 232 resource "aws_elb" "bar" { 233 name = "foobar-terraform-test" 234 availability_zones = ["us-west-2a"] 235 236 listener { 237 instance_port = 8000 238 instance_protocol = "http" 239 lb_port = 80 240 lb_protocol = "http" 241 } 242 } 243 244 resource "aws_launch_configuration" "foobar" { 245 name = "foobarautoscaling-terraform-test" 246 image_id = "ami-21f78e11" 247 instance_type = "t1.micro" 248 } 249 250 resource "aws_autoscaling_group" "bar" { 251 availability_zones = ["us-west-2a"] 252 name = "foobar3-terraform-test" 253 max_size = 5 254 min_size = 2 255 health_check_grace_period = 300 256 health_check_type = "ELB" 257 desired_capacity = 4 258 force_delete = true 259 260 launch_configuration = "${aws_launch_configuration.foobar.name}" 261 load_balancers = ["${aws_elb.bar.name}"] 262 } 263 `