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  }