diff --git a/builder/amazon/common/step_deregister_ami.go b/builder/amazon/common/step_deregister_ami.go index 3ad8711aa..da0bc0cc4 100644 --- a/builder/amazon/common/step_deregister_ami.go +++ b/builder/amazon/common/step_deregister_ami.go @@ -18,68 +18,71 @@ type StepDeregisterAMI struct { } func (s *StepDeregisterAMI) Run(state multistep.StateBag) multistep.StepAction { + // Check for force deregister + if !s.ForceDeregister { + return multistep.ActionContinue + } + ui := state.Get("ui").(packer.Ui) + ec2conn := state.Get("ec2").(*ec2.EC2) regions := s.Regions if len(regions) == 0 { - regions = append(regions, s.AccessConfig.RawRegion) + regions = append(regions, *ec2conn.Config.Region) } - // Check for force deregister - if s.ForceDeregister { - for _, region := range regions { - // get new connection for each region in which we need to deregister vms - session, err := s.AccessConfig.Session() - if err != nil { - return multistep.ActionHalt - } + for _, region := range regions { + // get new connection for each region in which we need to deregister vms + session, err := s.AccessConfig.Session() + if err != nil { + return multistep.ActionHalt + } + + regionconn := ec2.New(session.Copy(&aws.Config{ + Region: aws.String(region)}, + )) - regionconn := ec2.New(session.Copy(&aws.Config{ - Region: aws.String(region)}, - )) + resp, err := regionconn.DescribeImages(&ec2.DescribeImagesInput{ + Filters: []*ec2.Filter{{ + Name: aws.String("name"), + Values: []*string{aws.String(s.AMIName)}, + }}}) + + if err != nil { + err := fmt.Errorf("Error describing AMI: %s", err) + state.Put("error", err) + ui.Error(err.Error()) + return multistep.ActionHalt + } - resp, err := regionconn.DescribeImages(&ec2.DescribeImagesInput{ - Filters: []*ec2.Filter{{ - Name: aws.String("name"), - Values: []*string{aws.String(s.AMIName)}, - }}}) + // Deregister image(s) by name + for _, i := range resp.Images { + _, err := regionconn.DeregisterImage(&ec2.DeregisterImageInput{ + ImageId: i.ImageId, + }) if err != nil { - err := fmt.Errorf("Error describing AMI: %s", err) + err := fmt.Errorf("Error deregistering existing AMI: %s", err) state.Put("error", err) ui.Error(err.Error()) return multistep.ActionHalt } + ui.Say(fmt.Sprintf("Deregistered AMI %s, id: %s", s.AMIName, *i.ImageId)) - // Deregister image(s) by name - for _, i := range resp.Images { - _, err := regionconn.DeregisterImage(&ec2.DeregisterImageInput{ - ImageId: i.ImageId, - }) - - if err != nil { - err := fmt.Errorf("Error deregistering existing AMI: %s", err) - state.Put("error", err) - ui.Error(err.Error()) - return multistep.ActionHalt - } - ui.Say(fmt.Sprintf("Deregistered AMI %s, id: %s", s.AMIName, *i.ImageId)) - - // Delete snapshot(s) by image - if s.ForceDeleteSnapshot { - for _, b := range i.BlockDeviceMappings { - if b.Ebs != nil && aws.StringValue(b.Ebs.SnapshotId) != "" { - _, err := regionconn.DeleteSnapshot(&ec2.DeleteSnapshotInput{ - SnapshotId: b.Ebs.SnapshotId, - }) + // Delete snapshot(s) by image + if s.ForceDeleteSnapshot { + for _, b := range i.BlockDeviceMappings { + if b.Ebs != nil && aws.StringValue(b.Ebs.SnapshotId) != "" { + _, err := regionconn.DeleteSnapshot(&ec2.DeleteSnapshotInput{ + SnapshotId: b.Ebs.SnapshotId, + }) - if err != nil { - err := fmt.Errorf("Error deleting existing snapshot: %s", err) - state.Put("error", err) - ui.Error(err.Error()) - return multistep.ActionHalt - } - ui.Say(fmt.Sprintf("Deleted snapshot: %s", *b.Ebs.SnapshotId)) + if err != nil { + err := fmt.Errorf("Error deleting existing snapshot: %s", err) + state.Put("error", err) + ui.Error(err.Error()) + return multistep.ActionHalt } + ui.Say(fmt.Sprintf("Deleted snapshot: %s", *b.Ebs.SnapshotId)) } } }