diff --git a/builder/amazon/common/access_config.go b/builder/amazon/common/access_config.go index d1f5b6ffb..c03ed4f0e 100644 --- a/builder/amazon/common/access_config.go +++ b/builder/amazon/common/access_config.go @@ -20,6 +20,7 @@ type AccessConfig struct { AccessKey string `mapstructure:"access_key"` SecretKey string `mapstructure:"secret_key"` RawRegion string `mapstructure:"region"` + SkipValidation bool `mapstructure:"skip_region_validation"` Token string `mapstructure:"token"` ProfileName string `mapstructure:"profile"` } @@ -65,8 +66,10 @@ func (c *AccessConfig) Config() (*aws.Config, error) { // the region from the instance metadata if possible. func (c *AccessConfig) Region() (string, error) { if c.RawRegion != "" { - if valid := ValidateRegion(c.RawRegion); valid == false { - return "", fmt.Errorf("Not a valid region: %s", c.RawRegion) + if(c.SkipValidation == false) { + if valid := ValidateRegion(c.RawRegion); valid == false { + return "", fmt.Errorf("Not a valid region: %s", c.RawRegion) + } } return c.RawRegion, nil } @@ -83,8 +86,10 @@ func (c *AccessConfig) Region() (string, error) { func (c *AccessConfig) Prepare(ctx *interpolate.Context) []error { var errs []error if c.RawRegion != "" { - if valid := ValidateRegion(c.RawRegion); valid == false { - errs = append(errs, fmt.Errorf("Unknown region: %s", c.RawRegion)) + if(c.SkipValidation == false) { + if valid := ValidateRegion(c.RawRegion); valid == false { + errs = append(errs, fmt.Errorf("Unknown region: %s", c.RawRegion)) + } } } diff --git a/builder/amazon/common/access_config_test.go b/builder/amazon/common/access_config_test.go index dd20e9af9..9c8b3acfc 100644 --- a/builder/amazon/common/access_config_test.go +++ b/builder/amazon/common/access_config_test.go @@ -24,4 +24,18 @@ func TestAccessConfigPrepare_Region(t *testing.T) { if err := c.Prepare(nil); err != nil { t.Fatalf("shouldn't have err: %s", err) } + + c.RawRegion = "custom" + if err := c.Prepare(nil); err == nil { + t.Fatalf("should have err") + } + + c.RawRegion = "custom" + c.SkipValidation = true + if err := c.Prepare(nil); err != nil { + t.Fatalf("shouldn't have err: %s", err) + } + c.SkipValidation = false + + } diff --git a/builder/amazon/common/ami_config.go b/builder/amazon/common/ami_config.go index 377201902..3c759fe7e 100644 --- a/builder/amazon/common/ami_config.go +++ b/builder/amazon/common/ami_config.go @@ -15,6 +15,7 @@ type AMIConfig struct { AMIGroups []string `mapstructure:"ami_groups"` AMIProductCodes []string `mapstructure:"ami_product_codes"` AMIRegions []string `mapstructure:"ami_regions"` + AMISkipRegionValidation bool `mapstructure:"skip_region_validation"` AMITags map[string]string `mapstructure:"tags"` AMIEnhancedNetworking bool `mapstructure:"enhanced_networking"` AMIForceDeregister bool `mapstructure:"force_deregister"` @@ -40,9 +41,11 @@ func (c *AMIConfig) Prepare(ctx *interpolate.Context) []error { regionSet[region] = struct{}{} // Verify the region is real - if valid := ValidateRegion(region); valid == false { - errs = append(errs, fmt.Errorf("Unknown region: %s", region)) - continue + if c.AMISkipRegionValidation == false { + if valid := ValidateRegion(region); valid == false { + errs = append(errs, fmt.Errorf("Unknown region: %s", region)) + continue + } } regions = append(regions, region) diff --git a/builder/amazon/common/ami_config_test.go b/builder/amazon/common/ami_config_test.go index 54210fca9..77158c41c 100644 --- a/builder/amazon/common/ami_config_test.go +++ b/builder/amazon/common/ami_config_test.go @@ -49,4 +49,12 @@ func TestAMIConfigPrepare_regions(t *testing.T) { if !reflect.DeepEqual(c.AMIRegions, expected) { t.Fatalf("bad: %#v", c.AMIRegions) } + + c.AMIRegions = []string{"custom"} + c.AMISkipRegionValidation = true + if err := c.Prepare(nil); err != nil { + t.Fatal("shouldn't have error") + } + c.AMISkipRegionValidation = false + }