diff --git a/builder/digitalocean/builder.go b/builder/digitalocean/builder.go index 1c4572058..8d653ec13 100644 --- a/builder/digitalocean/builder.go +++ b/builder/digitalocean/builder.go @@ -4,6 +4,7 @@ package digitalocean import ( + "context" "fmt" "log" "net/url" @@ -46,6 +47,26 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe client.BaseURL = u } + if len(b.config.SnapshotRegions) > 0 { + opt := &godo.ListOptions{ + Page: 1, + PerPage: 200, + } + regions, _, err := client.Regions.List(context.TODO(), opt) + if err != nil { + return nil, fmt.Errorf("DigitalOcean: Unable to get regions, %s.", err) + } + for _, snapShotRegion := range b.config.SnapshotRegions { + for _, region := range regions { + if snapShotRegion == region.Slug { + continue + } else { + return nil, fmt.Errorf("DigitalOcean: Invalid region, %s.", snapShotRegion) + } + } + } + } + // Set up the state state := new(multistep.BasicStateBag) state.Put("config", b.config)