diff --git a/builtin/providers/aws/resource_aws_elb.go b/builtin/providers/aws/resource_aws_elb.go index d62f69552..345001199 100644 --- a/builtin/providers/aws/resource_aws_elb.go +++ b/builtin/providers/aws/resource_aws_elb.go @@ -29,7 +29,10 @@ func resource_aws_elb_create( // Expand the "listener" array to goamz compat []elb.Listener v := flatmap.Expand(rs.Attributes, "listener").([]interface{}) - listeners := expandListeners(v) + listeners, err := expandListeners(v) + if err != nil { + return nil, err + } v = flatmap.Expand(rs.Attributes, "availability_zones").([]interface{}) zones := expandStringList(v) @@ -43,7 +46,7 @@ func resource_aws_elb_create( log.Printf("[DEBUG] ELB create configuration: %#v", elbOpts) - _, err := elbconn.CreateLoadBalancer(elbOpts) + _, err = elbconn.CreateLoadBalancer(elbOpts) if err != nil { return nil, fmt.Errorf("Error creating ELB: %s", err) } diff --git a/builtin/providers/aws/resource_aws_security_group.go b/builtin/providers/aws/resource_aws_security_group.go index 14d57d620..f14321f24 100644 --- a/builtin/providers/aws/resource_aws_security_group.go +++ b/builtin/providers/aws/resource_aws_security_group.go @@ -67,7 +67,10 @@ func resource_aws_security_group_create( ingressRules := []ec2.IPPerm{} v, ok := flatmap.Expand(rs.Attributes, "ingress").([]interface{}) if ok { - ingressRules = expandIPPerms(v) + ingressRules, err = expandIPPerms(v) + if err != nil { + return rs, err + } } if len(ingressRules) > 0 { diff --git a/builtin/providers/aws/structure.go b/builtin/providers/aws/structure.go index b8669d97f..aac6d50d8 100644 --- a/builtin/providers/aws/structure.go +++ b/builtin/providers/aws/structure.go @@ -1,6 +1,7 @@ package aws import ( + "strconv" "strings" "github.com/mitchellh/goamz/autoscaling" @@ -10,7 +11,7 @@ import ( // Takes the result of flatmap.Expand for an array of listeners and // returns ELB API compatible objects -func expandListeners(configured []interface{}) []elb.Listener { +func expandListeners(configured []interface{}) ([]elb.Listener, error) { listeners := make([]elb.Listener, 0, len(configured)) // Loop over our configured listeners and create @@ -18,22 +19,29 @@ func expandListeners(configured []interface{}) []elb.Listener { for _, listener := range configured { newL := listener.(map[string]interface{}) + instancePort, err := strconv.ParseInt(newL["instance_port"].(string), 0, 0) + lbPort, err := strconv.ParseInt(newL["lb_port"].(string), 0, 0) + + if err != nil { + return nil, err + } + l := elb.Listener{ - InstancePort: int64(newL["instance_port"].(int)), + InstancePort: instancePort, InstanceProtocol: newL["instance_protocol"].(string), - LoadBalancerPort: int64(newL["lb_port"].(int)), + LoadBalancerPort: lbPort, Protocol: newL["lb_protocol"].(string), } listeners = append(listeners, l) } - return listeners + return listeners, nil } // Takes the result of flatmap.Expand for an array of ingress/egress // security group rules and returns EC2 API compatible objects -func expandIPPerms(configured []interface{}) []ec2.IPPerm { +func expandIPPerms(configured []interface{}) ([]ec2.IPPerm, error) { perms := make([]ec2.IPPerm, 0, len(configured)) // Loop over our configured permissions and create @@ -54,11 +62,17 @@ func expandIPPerms(configured []interface{}) []ec2.IPPerm { } } + fromPort, err := strconv.Atoi(newP["from_port"].(string)) + toPort, err := strconv.Atoi(newP["to_port"].(string)) + if err != nil { + return nil, err + } + // Create the permission objet p := ec2.IPPerm{ Protocol: newP["protocol"].(string), - FromPort: newP["from_port"].(int), - ToPort: newP["to_port"].(int), + FromPort: fromPort, + ToPort: toPort, SourceIPs: expandStringList(newP["cidr_blocks"].([]interface{})), SourceGroups: expandedGroups, } @@ -66,7 +80,7 @@ func expandIPPerms(configured []interface{}) []ec2.IPPerm { perms = append(perms, p) } - return perms + return perms, nil } // Flattens an array of ipPerms into a list of primitives that diff --git a/builtin/providers/aws/structure_test.go b/builtin/providers/aws/structure_test.go index 803e4f376..31d8662db 100644 --- a/builtin/providers/aws/structure_test.go +++ b/builtin/providers/aws/structure_test.go @@ -33,7 +33,11 @@ func testConf() map[string]string { func Test_expandIPPerms(t *testing.T) { expanded := flatmap.Expand(testConf(), "ingress").([]interface{}) - perms := expandIPPerms(expanded) + perms, err := expandIPPerms(expanded) + + if err != nil { + t.Fatalf("bad: %#v", err) + } expected := ec2.IPPerm{ Protocol: "icmp", FromPort: 1, @@ -118,7 +122,11 @@ func Test_flattenIPPerms(t *testing.T) { func Test_expandListeners(t *testing.T) { expanded := flatmap.Expand(testConf(), "listener").([]interface{}) - listeners := expandListeners(expanded) + listeners, err := expandListeners(expanded) + if err != nil { + t.Fatalf("bad: %#v", err) + } + expected := elb.Listener{ InstancePort: 8000, LoadBalancerPort: 80, diff --git a/builtin/providers/dnsimple/resource_dnsimple_record.go b/builtin/providers/dnsimple/resource_dnsimple_record.go index 611cc3606..b3d2da13f 100644 --- a/builtin/providers/dnsimple/resource_dnsimple_record.go +++ b/builtin/providers/dnsimple/resource_dnsimple_record.go @@ -159,6 +159,12 @@ func resource_dnsimple_record_update_state( s.Attributes["priority"] = rec.StringPrio() s.Attributes["domain_id"] = rec.StringDomainId() + if rec.Name == "" { + s.Attributes["hostname"] = s.Attributes["domain"] + } else { + s.Attributes["hostname"] = fmt.Sprintf("%s.%s", rec.Name, s.Attributes["domain"]) + } + return s, nil }