2016-05-25 22:58:53 +02:00
|
|
|
package aws
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"log"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/aws/aws-sdk-go/service/elb"
|
|
|
|
"github.com/hashicorp/terraform/helper/resource"
|
|
|
|
"github.com/hashicorp/terraform/terraform"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestAccAWSELBAttachment_basic(t *testing.T) {
|
|
|
|
var conf elb.LoadBalancerDescription
|
|
|
|
|
|
|
|
testCheckInstanceAttached := func(count int) resource.TestCheckFunc {
|
|
|
|
return func(*terraform.State) error {
|
|
|
|
if len(conf.Instances) != count {
|
|
|
|
return fmt.Errorf("instance count does not match")
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
resource.Test(t, resource.TestCase{
|
|
|
|
PreCheck: func() { testAccPreCheck(t) },
|
|
|
|
IDRefreshName: "aws_elb.bar",
|
|
|
|
Providers: testAccProviders,
|
|
|
|
CheckDestroy: testAccCheckAWSELBDestroy,
|
|
|
|
Steps: []resource.TestStep{
|
|
|
|
resource.TestStep{
|
|
|
|
Config: testAccAWSELBAttachmentConfig1,
|
|
|
|
Check: resource.ComposeTestCheckFunc(
|
|
|
|
testAccCheckAWSELBExists("aws_elb.bar", &conf),
|
|
|
|
testCheckInstanceAttached(1),
|
|
|
|
),
|
|
|
|
},
|
|
|
|
|
|
|
|
resource.TestStep{
|
|
|
|
Config: testAccAWSELBAttachmentConfig2,
|
|
|
|
Check: resource.ComposeTestCheckFunc(
|
|
|
|
testAccCheckAWSELBExists("aws_elb.bar", &conf),
|
|
|
|
testCheckInstanceAttached(2),
|
|
|
|
),
|
|
|
|
},
|
|
|
|
|
|
|
|
resource.TestStep{
|
|
|
|
Config: testAccAWSELBAttachmentConfig3,
|
|
|
|
Check: resource.ComposeTestCheckFunc(
|
|
|
|
testAccCheckAWSELBExists("aws_elb.bar", &conf),
|
|
|
|
testCheckInstanceAttached(2),
|
|
|
|
),
|
|
|
|
},
|
|
|
|
|
|
|
|
resource.TestStep{
|
|
|
|
Config: testAccAWSELBAttachmentConfig4,
|
|
|
|
Check: resource.ComposeTestCheckFunc(
|
|
|
|
testAccCheckAWSELBExists("aws_elb.bar", &conf),
|
|
|
|
testCheckInstanceAttached(0),
|
|
|
|
),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
// remove and instance and check that it's correctly re-attached.
|
|
|
|
func TestAccAWSELBAttachment_drift(t *testing.T) {
|
|
|
|
var conf elb.LoadBalancerDescription
|
|
|
|
|
|
|
|
deregInstance := func() {
|
|
|
|
conn := testAccProvider.Meta().(*AWSClient).elbconn
|
|
|
|
|
|
|
|
deRegisterInstancesOpts := elb.DeregisterInstancesFromLoadBalancerInput{
|
|
|
|
LoadBalancerName: conf.LoadBalancerName,
|
|
|
|
Instances: conf.Instances,
|
|
|
|
}
|
|
|
|
|
2016-06-29 14:38:46 +02:00
|
|
|
log.Printf("[DEBUG] deregistering instance %v from ELB", *conf.Instances[0].InstanceId)
|
2016-05-25 22:58:53 +02:00
|
|
|
|
|
|
|
_, err := conn.DeregisterInstancesFromLoadBalancer(&deRegisterInstancesOpts)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("Failure deregistering instances from ELB: %s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
testCheckInstanceAttached := func(count int) resource.TestCheckFunc {
|
|
|
|
return func(*terraform.State) error {
|
|
|
|
if len(conf.Instances) != count {
|
|
|
|
return fmt.Errorf("instance count does not match")
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
resource.Test(t, resource.TestCase{
|
|
|
|
PreCheck: func() { testAccPreCheck(t) },
|
|
|
|
IDRefreshName: "aws_elb.bar",
|
|
|
|
Providers: testAccProviders,
|
|
|
|
CheckDestroy: testAccCheckAWSELBDestroy,
|
|
|
|
Steps: []resource.TestStep{
|
|
|
|
resource.TestStep{
|
|
|
|
Config: testAccAWSELBAttachmentConfig1,
|
|
|
|
Check: resource.ComposeTestCheckFunc(
|
|
|
|
testAccCheckAWSELBExists("aws_elb.bar", &conf),
|
|
|
|
testCheckInstanceAttached(1),
|
|
|
|
),
|
|
|
|
},
|
|
|
|
|
|
|
|
// remove an instance from the ELB, and make sure it gets re-added
|
|
|
|
resource.TestStep{
|
|
|
|
Config: testAccAWSELBAttachmentConfig1,
|
|
|
|
PreConfig: deregInstance,
|
|
|
|
Check: resource.ComposeTestCheckFunc(
|
|
|
|
testAccCheckAWSELBExists("aws_elb.bar", &conf),
|
|
|
|
testCheckInstanceAttached(1),
|
|
|
|
),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
// add one attachment
|
|
|
|
const testAccAWSELBAttachmentConfig1 = `
|
|
|
|
resource "aws_elb" "bar" {
|
|
|
|
availability_zones = ["us-west-2a", "us-west-2b", "us-west-2c"]
|
|
|
|
|
|
|
|
listener {
|
|
|
|
instance_port = 8000
|
|
|
|
instance_protocol = "http"
|
|
|
|
lb_port = 80
|
|
|
|
lb_protocol = "http"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
resource "aws_instance" "foo1" {
|
|
|
|
# us-west-2
|
|
|
|
ami = "ami-043a5034"
|
|
|
|
instance_type = "t1.micro"
|
|
|
|
}
|
|
|
|
|
|
|
|
resource "aws_elb_attachment" "foo1" {
|
|
|
|
elb = "${aws_elb.bar.id}"
|
|
|
|
instance = "${aws_instance.foo1.id}"
|
|
|
|
}
|
|
|
|
`
|
|
|
|
|
|
|
|
// add a second attachment
|
|
|
|
const testAccAWSELBAttachmentConfig2 = `
|
|
|
|
resource "aws_elb" "bar" {
|
|
|
|
availability_zones = ["us-west-2a", "us-west-2b", "us-west-2c"]
|
|
|
|
|
|
|
|
listener {
|
|
|
|
instance_port = 8000
|
|
|
|
instance_protocol = "http"
|
|
|
|
lb_port = 80
|
|
|
|
lb_protocol = "http"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
resource "aws_instance" "foo1" {
|
|
|
|
# us-west-2
|
|
|
|
ami = "ami-043a5034"
|
|
|
|
instance_type = "t1.micro"
|
|
|
|
}
|
|
|
|
|
|
|
|
resource "aws_instance" "foo2" {
|
|
|
|
# us-west-2
|
|
|
|
ami = "ami-043a5034"
|
|
|
|
instance_type = "t1.micro"
|
|
|
|
}
|
|
|
|
|
|
|
|
resource "aws_elb_attachment" "foo1" {
|
|
|
|
elb = "${aws_elb.bar.id}"
|
|
|
|
instance = "${aws_instance.foo1.id}"
|
|
|
|
}
|
|
|
|
|
|
|
|
resource "aws_elb_attachment" "foo2" {
|
|
|
|
elb = "${aws_elb.bar.id}"
|
|
|
|
instance = "${aws_instance.foo2.id}"
|
|
|
|
}
|
|
|
|
`
|
|
|
|
|
|
|
|
// swap attachments between resources
|
|
|
|
const testAccAWSELBAttachmentConfig3 = `
|
|
|
|
resource "aws_elb" "bar" {
|
|
|
|
availability_zones = ["us-west-2a", "us-west-2b", "us-west-2c"]
|
|
|
|
|
|
|
|
listener {
|
|
|
|
instance_port = 8000
|
|
|
|
instance_protocol = "http"
|
|
|
|
lb_port = 80
|
|
|
|
lb_protocol = "http"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
resource "aws_instance" "foo1" {
|
|
|
|
# us-west-2
|
|
|
|
ami = "ami-043a5034"
|
|
|
|
instance_type = "t1.micro"
|
|
|
|
}
|
|
|
|
|
|
|
|
resource "aws_instance" "foo2" {
|
|
|
|
# us-west-2
|
|
|
|
ami = "ami-043a5034"
|
|
|
|
instance_type = "t1.micro"
|
|
|
|
}
|
|
|
|
|
|
|
|
resource "aws_elb_attachment" "foo1" {
|
|
|
|
elb = "${aws_elb.bar.id}"
|
|
|
|
instance = "${aws_instance.foo2.id}"
|
|
|
|
}
|
|
|
|
|
|
|
|
resource "aws_elb_attachment" "foo2" {
|
|
|
|
elb = "${aws_elb.bar.id}"
|
|
|
|
instance = "${aws_instance.foo1.id}"
|
|
|
|
}
|
|
|
|
`
|
|
|
|
|
|
|
|
// destroy attachments
|
|
|
|
const testAccAWSELBAttachmentConfig4 = `
|
|
|
|
resource "aws_elb" "bar" {
|
|
|
|
availability_zones = ["us-west-2a", "us-west-2b", "us-west-2c"]
|
|
|
|
|
|
|
|
listener {
|
|
|
|
instance_port = 8000
|
|
|
|
instance_protocol = "http"
|
|
|
|
lb_port = 80
|
|
|
|
lb_protocol = "http"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
`
|