add code to deduplicate the region list, and to make sure that the original region's kms key id is in the map.
This commit is contained in:
parent
2d02ea209d
commit
42f7cbc30b
|
@ -26,6 +26,26 @@ type StepAMIRegionCopy struct {
|
||||||
AMISkipBuildRegion bool
|
AMISkipBuildRegion bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *StepAMIRegionCopy) DeduplicateRegions() {
|
||||||
|
// Deduplicates regions by looping over the list of regions and storing
|
||||||
|
// the regions as keys in a map. This saves users from accidentally copying
|
||||||
|
// regions twice if they've added a region to a map twice.
|
||||||
|
|
||||||
|
RegionMap := map[string]bool{}
|
||||||
|
RegionSlice := []string{}
|
||||||
|
|
||||||
|
for _, r := range s.Regions {
|
||||||
|
RegionMap[r] = true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now print all those keys into the region slice again
|
||||||
|
for k, _ := range RegionMap {
|
||||||
|
RegionSlice = append(RegionSlice, k)
|
||||||
|
}
|
||||||
|
|
||||||
|
s.Regions = RegionSlice
|
||||||
|
}
|
||||||
|
|
||||||
func (s *StepAMIRegionCopy) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction {
|
func (s *StepAMIRegionCopy) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction {
|
||||||
ui := state.Get("ui").(packer.Ui)
|
ui := state.Get("ui").(packer.Ui)
|
||||||
amis := state.Get("amis").(map[string]string)
|
amis := state.Get("amis").(map[string]string)
|
||||||
|
@ -43,6 +63,10 @@ func (s *StepAMIRegionCopy) Run(ctx context.Context, state multistep.StateBag) m
|
||||||
if !s.AMISkipBuildRegion {
|
if !s.AMISkipBuildRegion {
|
||||||
s.Regions = append(s.Regions, s.OriginalRegion)
|
s.Regions = append(s.Regions, s.OriginalRegion)
|
||||||
}
|
}
|
||||||
|
// Now that we've added OriginalRegion, best to make sure there aren't
|
||||||
|
// any duplicates hanging around; duplicates will waste time.
|
||||||
|
s.DeduplicateRegions()
|
||||||
|
|
||||||
if *s.EncryptBootVolume {
|
if *s.EncryptBootVolume {
|
||||||
// encrypt_boot is true, so we have to copy the temporary
|
// encrypt_boot is true, so we have to copy the temporary
|
||||||
// AMI with required encryption setting.
|
// AMI with required encryption setting.
|
||||||
|
@ -50,9 +74,13 @@ func (s *StepAMIRegionCopy) Run(ctx context.Context, state multistep.StateBag) m
|
||||||
if s.RegionKeyIds == nil {
|
if s.RegionKeyIds == nil {
|
||||||
s.RegionKeyIds = make(map[string]string)
|
s.RegionKeyIds = make(map[string]string)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure the kms_key_id for the original region is in the map
|
||||||
|
if _, ok := s.RegionKeyIds[s.OriginalRegion]; !ok {
|
||||||
s.RegionKeyIds[s.OriginalRegion] = s.AMIKmsKeyId
|
s.RegionKeyIds[s.OriginalRegion] = s.AMIKmsKeyId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if len(s.Regions) == 0 {
|
if len(s.Regions) == 0 {
|
||||||
return multistep.ActionContinue
|
return multistep.ActionContinue
|
||||||
|
|
Loading…
Reference in New Issue