diff --git a/ibm/provider/provider.go b/ibm/provider/provider.go index 64c4317ee6..59c9842f35 100644 --- a/ibm/provider/provider.go +++ b/ibm/provider/provider.go @@ -72,6 +72,18 @@ import ( "github.com/IBM-Cloud/terraform-provider-ibm/ibm/validate" ) +var regionLocationMap = map[string]struct{}{ + "au-syd": {}, + "ca-tor": {}, + "eu-de": {}, + "eu-gb": {}, + "jp-tok": {}, + "jp-osa": {}, + "us-east": {}, + "us-south": {}, + "br-sao": {}, +} + // Provider returns a *schema.Provider. func Provider() *schema.Provider { provider := schema.Provider{ @@ -2415,6 +2427,11 @@ func providerConfigure(d *schema.ResourceData) (interface{}, error) { if err != nil { return nil, err } + + if isRegionValid(region) == false { + return nil, fmt.Errorf("[ERROR] Provider region %q is not supported. Valid provider region(s) are: %q", region, getRegionNames()) + } + // Set environment variable to be used in DiffSupressFunction if wskEnvVal.(string) == "" { os.Setenv("FUNCTION_NAMESPACE", wskNameSpace) @@ -2444,3 +2461,16 @@ func providerConfigure(d *schema.ResourceData) (interface{}, error) { return config.ClientSession() } + +func isRegionValid(region string) bool { + _, exists := regionLocationMap[region] + return exists +} + +func getRegionNames() []string { + regions := make([]string, 0, len(regionLocationMap)) + for region := range regionLocationMap { + regions = append(regions, region) + } + return regions +}