github.com/gabrielperezs/terraform@v0.7.0-rc2.0.20160715084931-f7da2612946f/builtin/providers/aws/data_source_availability_zones.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"sort"
     7  	"time"
     8  
     9  	"github.com/aws/aws-sdk-go/aws"
    10  	"github.com/aws/aws-sdk-go/service/ec2"
    11  	"github.com/hashicorp/terraform/helper/schema"
    12  )
    13  
    14  func dataSourceAwsAvailabilityZones() *schema.Resource {
    15  	return &schema.Resource{
    16  		Read: dataSourceAwsAvailabilityZonesRead,
    17  
    18  		Schema: map[string]*schema.Schema{
    19  			"names": &schema.Schema{
    20  				Type:     schema.TypeList,
    21  				Computed: true,
    22  				Elem:     &schema.Schema{Type: schema.TypeString},
    23  			},
    24  		},
    25  	}
    26  }
    27  
    28  func dataSourceAwsAvailabilityZonesRead(d *schema.ResourceData, meta interface{}) error {
    29  	conn := meta.(*AWSClient).ec2conn
    30  
    31  	log.Printf("[DEBUG] Reading availability zones")
    32  	d.SetId(time.Now().UTC().String())
    33  
    34  	req := &ec2.DescribeAvailabilityZonesInput{DryRun: aws.Bool(false)}
    35  	azresp, err := conn.DescribeAvailabilityZones(req)
    36  	if err != nil {
    37  		return fmt.Errorf("Error listing availability zones: %s", err)
    38  	}
    39  
    40  	raw := make([]string, len(azresp.AvailabilityZones))
    41  	for i, v := range azresp.AvailabilityZones {
    42  		raw[i] = *v.ZoneName
    43  	}
    44  
    45  	sort.Strings(raw)
    46  
    47  	if err := d.Set("names", raw); err != nil {
    48  		return fmt.Errorf("[WARN] Error setting availability zones")
    49  	}
    50  
    51  	return nil
    52  }