terraform/builtin/providers/aws/resource_aws_route53_delega...

112 lines
3.0 KiB
Go

package aws
import (
"log"
"sort"
"strings"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/route53"
)
func resourceAwsRoute53DelegationSet() *schema.Resource {
return &schema.Resource{
Create: resourceAwsRoute53DelegationSetCreate,
Read: resourceAwsRoute53DelegationSetRead,
Delete: resourceAwsRoute53DelegationSetDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Schema: map[string]*schema.Schema{
"reference_name": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
"name_servers": &schema.Schema{
Type: schema.TypeList,
Elem: &schema.Schema{Type: schema.TypeString},
Computed: true,
},
},
}
}
func resourceAwsRoute53DelegationSetCreate(d *schema.ResourceData, meta interface{}) error {
r53 := meta.(*AWSClient).r53conn
callerRef := resource.UniqueId()
if v, ok := d.GetOk("reference_name"); ok {
callerRef = strings.Join([]string{
v.(string), "-", callerRef,
}, "")
}
input := &route53.CreateReusableDelegationSetInput{
CallerReference: aws.String(callerRef),
}
log.Printf("[DEBUG] Creating Route53 reusable delegation set: %#v", input)
out, err := r53.CreateReusableDelegationSet(input)
if err != nil {
return err
}
log.Printf("[DEBUG] Route53 reusable delegation set created: %#v", out)
set := out.DelegationSet
d.SetId(cleanDelegationSetId(*set.Id))
d.Set("name_servers", expandNameServers(set.NameServers))
return nil
}
func resourceAwsRoute53DelegationSetRead(d *schema.ResourceData, meta interface{}) error {
r53 := meta.(*AWSClient).r53conn
input := &route53.GetReusableDelegationSetInput{
Id: aws.String(cleanDelegationSetId(d.Id())),
}
log.Printf("[DEBUG] Reading Route53 reusable delegation set: %#v", input)
out, err := r53.GetReusableDelegationSet(input)
if err != nil {
return err
}
log.Printf("[DEBUG] Route53 reusable delegation set received: %#v", out)
set := out.DelegationSet
d.SetId(cleanDelegationSetId(*set.Id))
d.Set("name_servers", expandNameServers(set.NameServers))
return nil
}
func resourceAwsRoute53DelegationSetDelete(d *schema.ResourceData, meta interface{}) error {
r53 := meta.(*AWSClient).r53conn
input := &route53.DeleteReusableDelegationSetInput{
Id: aws.String(cleanDelegationSetId(d.Id())),
}
log.Printf("[DEBUG] Deleting Route53 reusable delegation set: %#v", input)
_, err := r53.DeleteReusableDelegationSet(input)
return err
}
func expandNameServers(name_servers []*string) []string {
log.Printf("[DEBUG] Processing %d name servers: %#v...", len(name_servers), name_servers)
ns := make([]string, len(name_servers))
for i, server := range name_servers {
ns[i] = *server
}
sort.Strings(ns)
log.Printf("[DEBUG] Returning processed name servers: %#v", ns)
return ns
}
func cleanDelegationSetId(id string) string {
return strings.TrimPrefix(id, "/delegationset/")
}