github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/aws/data_source_aws_acm_certificate.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  
     7  	"github.com/aws/aws-sdk-go/aws"
     8  	"github.com/aws/aws-sdk-go/service/acm"
     9  	"github.com/hashicorp/errwrap"
    10  	"github.com/hashicorp/terraform/helper/schema"
    11  )
    12  
    13  func dataSourceAwsAcmCertificate() *schema.Resource {
    14  	return &schema.Resource{
    15  		Read: dataSourceAwsAcmCertificateRead,
    16  		Schema: map[string]*schema.Schema{
    17  			"domain": {
    18  				Type:     schema.TypeString,
    19  				Required: true,
    20  			},
    21  			"arn": {
    22  				Type:     schema.TypeString,
    23  				Computed: true,
    24  			},
    25  			"statuses": {
    26  				Type:     schema.TypeList,
    27  				Optional: true,
    28  				Elem:     &schema.Schema{Type: schema.TypeString},
    29  			},
    30  		},
    31  	}
    32  }
    33  
    34  func dataSourceAwsAcmCertificateRead(d *schema.ResourceData, meta interface{}) error {
    35  	conn := meta.(*AWSClient).acmconn
    36  	params := &acm.ListCertificatesInput{}
    37  
    38  	target := d.Get("domain")
    39  
    40  	statuses, ok := d.GetOk("statuses")
    41  	if ok {
    42  		statusStrings := statuses.([]interface{})
    43  		params.CertificateStatuses = expandStringList(statusStrings)
    44  	} else {
    45  		params.CertificateStatuses = []*string{aws.String("ISSUED")}
    46  	}
    47  
    48  	var arns []string
    49  	err := conn.ListCertificatesPages(params, func(page *acm.ListCertificatesOutput, lastPage bool) bool {
    50  		for _, cert := range page.CertificateSummaryList {
    51  			if *cert.DomainName == target {
    52  				arns = append(arns, *cert.CertificateArn)
    53  			}
    54  		}
    55  
    56  		return true
    57  	})
    58  	if err != nil {
    59  		return errwrap.Wrapf("Error describing certificates: {{err}}", err)
    60  	}
    61  
    62  	if len(arns) == 0 {
    63  		return fmt.Errorf("No certificate for domain %q found in this region.", target)
    64  	}
    65  	if len(arns) > 1 {
    66  		return fmt.Errorf("Multiple certificates for domain %q found in this region.", target)
    67  	}
    68  
    69  	d.SetId(time.Now().UTC().String())
    70  	d.Set("arn", arns[0])
    71  
    72  	return nil
    73  }