Merge pull request #2571 from TimeIncOSS/f-aws-autogenerated-elb-name

provider/aws: Allow ELB name to be generated
This commit is contained in:
Clint 2015-07-21 15:52:36 -05:00
commit f979fd7dee
3 changed files with 22 additions and 7 deletions

View File

@ -11,6 +11,7 @@ import (
"github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/service/elb" "github.com/aws/aws-sdk-go/service/elb"
"github.com/hashicorp/terraform/helper/hashcode" "github.com/hashicorp/terraform/helper/hashcode"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema" "github.com/hashicorp/terraform/helper/schema"
) )
@ -24,7 +25,8 @@ func resourceAwsElb() *schema.Resource {
Schema: map[string]*schema.Schema{ Schema: map[string]*schema.Schema{
"name": &schema.Schema{ "name": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Optional: true,
Computed: true,
ForceNew: true, ForceNew: true,
ValidateFunc: func(v interface{}, k string) (ws []string, errors []error) { ValidateFunc: func(v interface{}, k string) (ws []string, errors []error) {
value := v.(string) value := v.(string)
@ -211,10 +213,18 @@ func resourceAwsElbCreate(d *schema.ResourceData, meta interface{}) error {
return err return err
} }
var elbName string
if v, ok := d.GetOk("name"); ok {
elbName = v.(string)
} else {
elbName = resource.PrefixedUniqueId("tf-lb-")
d.Set("name", elbName)
}
tags := tagsFromMapELB(d.Get("tags").(map[string]interface{})) tags := tagsFromMapELB(d.Get("tags").(map[string]interface{}))
// Provision the elb // Provision the elb
elbOpts := &elb.CreateLoadBalancerInput{ elbOpts := &elb.CreateLoadBalancerInput{
LoadBalancerName: aws.String(d.Get("name").(string)), LoadBalancerName: aws.String(elbName),
Listeners: listeners, Listeners: listeners,
Tags: tags, Tags: tags,
} }
@ -241,7 +251,7 @@ func resourceAwsElbCreate(d *schema.ResourceData, meta interface{}) error {
} }
// Assign the elb's unique identifier for use later // Assign the elb's unique identifier for use later
d.SetId(d.Get("name").(string)) d.SetId(elbName)
log.Printf("[INFO] ELB ID: %s", d.Id()) log.Printf("[INFO] ELB ID: %s", d.Id())
// Enable partial mode and record what we set // Enable partial mode and record what we set

View File

@ -9,13 +9,18 @@ import (
const UniqueIdPrefix = `terraform-` const UniqueIdPrefix = `terraform-`
// Helper for a resource to generate a unique identifier // Helper for a resource to generate a unique identifier w/ default prefix
func UniqueId() string {
return PrefixedUniqueId(UniqueIdPrefix)
}
// Helper for a resource to generate a unique identifier w/ given prefix
// //
// This uses a simple RFC 4122 v4 UUID with some basic cosmetic filters // This uses a simple RFC 4122 v4 UUID with some basic cosmetic filters
// applied (base32, remove padding, downcase) to make visually distinguishing // applied (base32, remove padding, downcase) to make visually distinguishing
// identifiers easier. // identifiers easier.
func UniqueId() string { func PrefixedUniqueId(prefix string) string {
return fmt.Sprintf("%s%s", UniqueIdPrefix, return fmt.Sprintf("%s%s", prefix,
strings.ToLower( strings.ToLower(
strings.Replace( strings.Replace(
base32.StdEncoding.EncodeToString(uuidV4()), base32.StdEncoding.EncodeToString(uuidV4()),

View File

@ -57,7 +57,7 @@ resource "aws_elb" "bar" {
The following arguments are supported: The following arguments are supported:
* `name` - (Required) The name of the ELB * `name` - (Optional) The name of the ELB. By default generated by terraform.
* `availability_zones` - (Required for an EC2-classic ELB) The AZ's to serve traffic in. * `availability_zones` - (Required for an EC2-classic ELB) The AZ's to serve traffic in.
* `security_groups` - (Optional) A list of security group IDs to assign to the ELB. * `security_groups` - (Optional) A list of security group IDs to assign to the ELB.
* `subnets` - (Required for a VPC ELB) A list of subnet IDs to attach to the ELB. * `subnets` - (Required for a VPC ELB) A list of subnet IDs to attach to the ELB.