From 0eed0908dfa003a9e673991be409cb4098260796 Mon Sep 17 00:00:00 2001 From: Luke Chadwick Date: Wed, 30 Jul 2014 21:46:51 +1000 Subject: [PATCH 1/2] Add health_check to aws_elb resource --- builtin/providers/aws/resource_aws_elb.go | 37 +++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/builtin/providers/aws/resource_aws_elb.go b/builtin/providers/aws/resource_aws_elb.go index 111388b329db..2f5069cde024 100644 --- a/builtin/providers/aws/resource_aws_elb.go +++ b/builtin/providers/aws/resource_aws_elb.go @@ -3,6 +3,7 @@ package aws import ( "fmt" "log" + "strconv" "github.com/hashicorp/terraform/flatmap" "github.com/hashicorp/terraform/helper/config" @@ -75,6 +76,35 @@ func resource_aws_elb_create( } } } + + if _, ok := rs.Attributes["health_check.#"]; ok { + v := flatmap.Expand(rs.Attributes, "health_check").([]interface{}) + health_check := v[0].(map[string]interface{}) + healthyThreshold, err := strconv.ParseInt(health_check["healthy_threshold"].(string), 0, 0) + unhealthyThreshold, err := strconv.ParseInt(health_check["unhealthy_threshold"].(string), 0, 0) + interval, err := strconv.ParseInt(health_check["interval"].(string), 0, 0) + timeout, err := strconv.ParseInt(health_check["timeout"].(string), 0, 0) + + if err != nil { + return nil, err + } + + configureHealthCheckOpts := elb.ConfigureHealthCheck{ + LoadBalancerName: elbName, + Check: elb.HealthCheck{ + HealthyThreshold: healthyThreshold, + UnhealthyThreshold: unhealthyThreshold, + Interval: interval, + Target: health_check["target"].(string), + Timeout: timeout, + }, + } + + _, err = elbconn.ConfigureHealthCheck(&configureHealthCheckOpts) + if err != nil { + return rs, fmt.Errorf("Failure configuring health check: %s", err) + } + } loadBalancer, err := resource_aws_elb_retrieve_balancer(rs.ID, elbconn) if err != nil { @@ -220,6 +250,7 @@ func resource_aws_elb_diff( "availability_zone": diff.AttrTypeCreate, "listener": diff.AttrTypeCreate, "instances": diff.AttrTypeUpdate, + "health_check": diff.AttrTypeCreate, }, ComputedAttrs: []string{ @@ -288,6 +319,12 @@ func resource_aws_elb_validation() *config.Validator { Optional: []string{ "instances.*", "availability_zones.*", + "health_check.#", + "health_check.0.healthy_threshold", + "health_check.0.unhealthy_threshold", + "health_check.0.interval", + "health_check.0.target", + "health_check.0.timeout", }, } } From dcd6449245c64da6b387cc8d95cd4c45565fbeb0 Mon Sep 17 00:00:00 2001 From: Luke Chadwick Date: Wed, 30 Jul 2014 22:14:18 +1000 Subject: [PATCH 2/2] Add documentation for elb health_check --- .../docs/providers/aws/r/elb.html.markdown | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/website/source/docs/providers/aws/r/elb.html.markdown b/website/source/docs/providers/aws/r/elb.html.markdown index 7e10c18710a1..4d8f88ea5588 100644 --- a/website/source/docs/providers/aws/r/elb.html.markdown +++ b/website/source/docs/providers/aws/r/elb.html.markdown @@ -23,6 +23,14 @@ resource "aws_elb" "bar" { lb_protocol = "http" } + health_check { + healthy_threshold = 2 + unhealthy_threshold = 2 + timeout = 3 + target = "HTTP:8000/" + interval = 30 + } + instances = ["${aws_instance.foo.id}"] } ``` @@ -35,6 +43,7 @@ The following arguments are supported: * `availability_zones` - (Optional) The AZ's to serve traffic in. * `instances` - (Optional) A list of instance ids to place in the ELB pool. * `listener` - (Required) A list of listener blocks. Listeners documented below. +* `listener` - (Required) A health_check block. Health Check documented below. Listeners support the following: @@ -43,6 +52,15 @@ Listeners support the following: * `lb_port` - (Required) The port to listen on for the load balancer * `lb_protocol` - (Required) The protocol to listen on. +Health Check supports the following: + +* `healthy_threshold` - (Required) The number of checks before the instance is declared healthy. +* `unhealthy_threshold` - (Required) The number of checks before the instance is declared unhealthy. +* `target` - (Required) The target of the check. +* `interval` - (Required) The interval between checks. +* `timeout` - (Required) The length of time before the check times out. + + ## Attributes Reference The following attributes are exported: @@ -51,4 +69,3 @@ The following attributes are exported: * `name` - The name of the ELB * `dns_name` - The DNS name of the ELB * `instances` - The list of instances in the ELB -