github.com/marksheahan/packer@v0.10.2-0.20160613200515-1acb2d6645a0/builder/amazon/common/step_deregister_ami.go (about) 1 package common 2 3 import ( 4 "fmt" 5 6 "github.com/aws/aws-sdk-go/aws" 7 "github.com/aws/aws-sdk-go/service/ec2" 8 "github.com/mitchellh/multistep" 9 "github.com/mitchellh/packer/packer" 10 ) 11 12 type StepDeregisterAMI struct { 13 ForceDeregister bool 14 AMIName string 15 } 16 17 func (s *StepDeregisterAMI) Run(state multistep.StateBag) multistep.StepAction { 18 ec2conn := state.Get("ec2").(*ec2.EC2) 19 ui := state.Get("ui").(packer.Ui) 20 21 // check for force deregister 22 if s.ForceDeregister { 23 resp, err := ec2conn.DescribeImages(&ec2.DescribeImagesInput{ 24 Filters: []*ec2.Filter{&ec2.Filter{ 25 Name: aws.String("name"), 26 Values: []*string{aws.String(s.AMIName)}, 27 }}}) 28 29 if err != nil { 30 err := fmt.Errorf("Error creating AMI: %s", err) 31 state.Put("error", err) 32 ui.Error(err.Error()) 33 return multistep.ActionHalt 34 } 35 36 // deregister image(s) by that name 37 for _, i := range resp.Images { 38 _, err := ec2conn.DeregisterImage(&ec2.DeregisterImageInput{ 39 ImageId: i.ImageId, 40 }) 41 42 if err != nil { 43 err := fmt.Errorf("Error deregistering existing AMI: %s", err) 44 state.Put("error", err) 45 ui.Error(err.Error()) 46 return multistep.ActionHalt 47 } 48 ui.Say(fmt.Sprintf("Deregistered AMI %s, id: %s", s.AMIName, *i.ImageId)) 49 } 50 } 51 52 return multistep.ActionContinue 53 } 54 55 func (s *StepDeregisterAMI) Cleanup(state multistep.StateBag) { 56 }