github.phpd.cn/hashicorp/packer@v1.3.2/builder/amazon/common/regions.go (about) 1 package common 2 3 import ( 4 "fmt" 5 6 "github.com/aws/aws-sdk-go/service/ec2/ec2iface" 7 ) 8 9 func listEC2Regions(ec2conn ec2iface.EC2API) ([]string, error) { 10 var regions []string 11 resultRegions, err := ec2conn.DescribeRegions(nil) 12 if err != nil { 13 return []string{}, err 14 } 15 for _, region := range resultRegions.Regions { 16 regions = append(regions, *region.RegionName) 17 } 18 19 return regions, nil 20 } 21 22 // ValidateRegion returns true if the supplied region is a valid AWS 23 // region and false if it's not. 24 func (c *AccessConfig) ValidateRegion(regions ...string) error { 25 ec2conn, err := c.NewEC2Connection() 26 if err != nil { 27 return err 28 } 29 30 validRegions, err := listEC2Regions(ec2conn) 31 if err != nil { 32 return err 33 } 34 35 var invalidRegions []string 36 for _, region := range regions { 37 found := false 38 for _, validRegion := range validRegions { 39 if region == validRegion { 40 found = true 41 break 42 } 43 } 44 if !found { 45 invalidRegions = append(invalidRegions, region) 46 } 47 } 48 49 if len(invalidRegions) > 0 { 50 return fmt.Errorf("Invalid region(s): %v", invalidRegions) 51 } 52 return nil 53 }