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 }