github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/aws/resource_aws_ses_domain_identity.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  
     7  	"github.com/aws/aws-sdk-go/aws"
     8  	"github.com/aws/aws-sdk-go/service/ses"
     9  	"github.com/hashicorp/terraform/helper/schema"
    10  )
    11  
    12  func resourceAwsSesDomainIdentity() *schema.Resource {
    13  	return &schema.Resource{
    14  		Create: resourceAwsSesDomainIdentityCreate,
    15  		Read:   resourceAwsSesDomainIdentityRead,
    16  		Delete: resourceAwsSesDomainIdentityDelete,
    17  		Importer: &schema.ResourceImporter{
    18  			State: schema.ImportStatePassthrough,
    19  		},
    20  
    21  		Schema: map[string]*schema.Schema{
    22  			"arn": {
    23  				Type:     schema.TypeString,
    24  				Computed: true,
    25  			},
    26  			"domain": {
    27  				Type:     schema.TypeString,
    28  				Required: true,
    29  				ForceNew: true,
    30  			},
    31  			"verification_token": {
    32  				Type:     schema.TypeString,
    33  				Computed: true,
    34  			},
    35  		},
    36  	}
    37  }
    38  
    39  func resourceAwsSesDomainIdentityCreate(d *schema.ResourceData, meta interface{}) error {
    40  	conn := meta.(*AWSClient).sesConn
    41  
    42  	domainName := d.Get("domain").(string)
    43  
    44  	createOpts := &ses.VerifyDomainIdentityInput{
    45  		Domain: aws.String(domainName),
    46  	}
    47  
    48  	_, err := conn.VerifyDomainIdentity(createOpts)
    49  	if err != nil {
    50  		return fmt.Errorf("Error requesting SES domain identity verification: %s", err)
    51  	}
    52  
    53  	d.SetId(domainName)
    54  
    55  	return resourceAwsSesDomainIdentityRead(d, meta)
    56  }
    57  
    58  func resourceAwsSesDomainIdentityRead(d *schema.ResourceData, meta interface{}) error {
    59  	conn := meta.(*AWSClient).sesConn
    60  
    61  	domainName := d.Id()
    62  	d.Set("domain", domainName)
    63  
    64  	readOpts := &ses.GetIdentityVerificationAttributesInput{
    65  		Identities: []*string{
    66  			aws.String(domainName),
    67  		},
    68  	}
    69  
    70  	response, err := conn.GetIdentityVerificationAttributes(readOpts)
    71  	if err != nil {
    72  		log.Printf("[WARN] Error fetching identity verification attributes for %s: %s", d.Id(), err)
    73  		return err
    74  	}
    75  
    76  	verificationAttrs, ok := response.VerificationAttributes[domainName]
    77  	if !ok {
    78  		log.Printf("[WARN] Domain not listed in response when fetching verification attributes for %s", d.Id())
    79  		d.SetId("")
    80  		return nil
    81  	}
    82  
    83  	d.Set("arn", fmt.Sprintf("arn:%s:ses:%s:%s:identity/%s", meta.(*AWSClient).partition, meta.(*AWSClient).region, meta.(*AWSClient).accountid, d.Id()))
    84  	d.Set("verification_token", verificationAttrs.VerificationToken)
    85  	return nil
    86  }
    87  
    88  func resourceAwsSesDomainIdentityDelete(d *schema.ResourceData, meta interface{}) error {
    89  	conn := meta.(*AWSClient).sesConn
    90  
    91  	domainName := d.Get("domain").(string)
    92  
    93  	deleteOpts := &ses.DeleteIdentityInput{
    94  		Identity: aws.String(domainName),
    95  	}
    96  
    97  	_, err := conn.DeleteIdentity(deleteOpts)
    98  	if err != nil {
    99  		return fmt.Errorf("Error deleting SES domain identity: %s", err)
   100  	}
   101  
   102  	return nil
   103  }