diff --git a/builder/digitalocean/builder.go b/builder/digitalocean/builder.go index 66054f67f..16d11ba29 100644 --- a/builder/digitalocean/builder.go +++ b/builder/digitalocean/builder.go @@ -35,16 +35,6 @@ func (b *Builder) Prepare(raws ...interface{}) ([]string, error) { return nil, nil } -func contains(slice []string, item string) bool { - set := make(map[string]struct{}, len(slice)) - for _, s := range slice { - set[s] = struct{}{} - } - - _, ok := set[item] - return ok -} - func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packer.Artifact, error) { client := godo.NewClient(oauth2.NewClient(oauth2.NoContext, &apiTokenSource{ AccessToken: b.config.APIToken, @@ -67,31 +57,14 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe return nil, fmt.Errorf("DigitalOcean: Unable to get regions, %s", err) } - var dcs []string + validRegions := make(map[string]struct{}) for _, val := range regions { - dcs = append(dcs, val.Slug) - } - - regionSet := make(map[string]struct{}) - regionsMap := make([]string, 0, len(b.config.SnapshotRegions)) - regionSet[b.config.Region] = struct{}{} - for _, region := range b.config.SnapshotRegions { - // If we already saw the region, then don't look again - if _, ok := regionSet[region]; ok { - continue - } - - // Mark that we saw the region - regionSet[region] = struct{}{} - - regionsMap = append(regionsMap, region) + validRegions[val.Slug] = struct{}{} } - for _, val := range regionsMap { - if contains(dcs, val) { - continue - } else { - return nil, fmt.Errorf("DigitalOcean: Invalid region, %s", val) + for _, region := range append(b.config.SnapshotRegions, b.config.Region) { + if _, ok := validRegions[region]; !ok { + return nil, fmt.Errorf("DigitalOcean: Invalid region, %s", region) } } }