From 556da47d35139b653dddac1bded87cc8228f5a2d Mon Sep 17 00:00:00 2001 From: Megan Marsh Date: Thu, 30 Nov 2017 13:51:33 -0800 Subject: [PATCH] modify validation to allow user to have the original region in the ami_regions list --- builder/amazon/common/ami_config.go | 38 ++++++++++++----------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/builder/amazon/common/ami_config.go b/builder/amazon/common/ami_config.go index aa0792e3a..50c01975a 100644 --- a/builder/amazon/common/ami_config.go +++ b/builder/amazon/common/ami_config.go @@ -41,22 +41,20 @@ func stringInSlice(s []string, searchstr string) bool { func (c *AMIConfig) Prepare(accessConfig *AccessConfig, ctx *interpolate.Context) []error { var errs []error - if accessConfig != nil { - session, err := accessConfig.Session() - if err != nil { - errs = append(errs, err) - } else { - region := *session.Config.Region - if stringInSlice(c.AMIRegions, region) { - errs = append(errs, fmt.Errorf("Cannot copy AMI to AWS session region '%s', please remove it from `ami_regions`.", region)) - } - } - } - if c.AMIName == "" { errs = append(errs, fmt.Errorf("ami_name must be specified")) } + // Make sure that if we have region_kms_key_ids defined, + // the regions in region_kms_key_ids are also in ami_regions + if len(c.AMIRegionKMSKeyIDs) > 0 { + for kmsKeyRegion := range c.AMIRegionKMSKeyIDs { + if !stringInSlice(c.AMIRegions, kmsKeyRegion) { + errs = append(errs, fmt.Errorf("Region %s is in region_kms_key_ids but not in ami_regions", kmsKeyRegion)) + } + } + } + if len(c.AMIRegions) > 0 { regionSet := make(map[string]struct{}) regions := make([]string, 0, len(c.AMIRegions)) @@ -84,21 +82,17 @@ func (c *AMIConfig) Prepare(accessConfig *AccessConfig, ctx *interpolate.Context errs = append(errs, fmt.Errorf("Region %s is in ami_regions but not in region_kms_key_ids", region)) } } - + if (accessConfig != nil) && (region == accessConfig.RawRegion) { + // make sure we don't try to copy to the region we originally + // create the AMI in. + fmt.Printf("Cannot copy AMI to AWS session region '%s', deleting it from `ami_regions`.", region) + continue + } regions = append(regions, region) } c.AMIRegions = regions } - // Make sure that if we have region_kms_key_ids defined, - // the regions in region_kms_key_ids are also in ami_regions - if len(c.AMIRegionKMSKeyIDs) > 0 { - for kmsKeyRegion := range c.AMIRegionKMSKeyIDs { - if !stringInSlice(c.AMIRegions, kmsKeyRegion) { - errs = append(errs, fmt.Errorf("Region %s is in region_kms_key_ids but not in ami_regions", kmsKeyRegion)) - } - } - } if len(c.AMIUsers) > 0 && c.AMIEncryptBootVolume { errs = append(errs, fmt.Errorf("Cannot share AMI with encrypted boot volume"))