github.com/mmcquillan/packer@v1.1.1-0.20171009221028-c85cf0483a5d/builder/amazon/common/step_modify_ebs_instance.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/hashicorp/packer/packer"
     9  	"github.com/mitchellh/multistep"
    10  )
    11  
    12  type StepModifyEBSBackedInstance struct {
    13  	EnableAMIENASupport      bool
    14  	EnableAMISriovNetSupport bool
    15  }
    16  
    17  func (s *StepModifyEBSBackedInstance) Run(state multistep.StateBag) multistep.StepAction {
    18  	ec2conn := state.Get("ec2").(*ec2.EC2)
    19  	instance := state.Get("instance").(*ec2.Instance)
    20  	ui := state.Get("ui").(packer.Ui)
    21  
    22  	// Set SriovNetSupport to "simple". See http://goo.gl/icuXh5
    23  	// As of February 2017, this applies to C3, C4, D2, I2, R3, and M4 (excluding m4.16xlarge)
    24  	if s.EnableAMISriovNetSupport {
    25  		ui.Say("Enabling Enhanced Networking (SR-IOV)...")
    26  		simple := "simple"
    27  		_, err := ec2conn.ModifyInstanceAttribute(&ec2.ModifyInstanceAttributeInput{
    28  			InstanceId:      instance.InstanceId,
    29  			SriovNetSupport: &ec2.AttributeValue{Value: &simple},
    30  		})
    31  		if err != nil {
    32  			err := fmt.Errorf("Error enabling Enhanced Networking (SR-IOV) on %s: %s", *instance.InstanceId, err)
    33  			state.Put("error", err)
    34  			ui.Error(err.Error())
    35  			return multistep.ActionHalt
    36  		}
    37  	}
    38  
    39  	// Set EnaSupport to true.
    40  	// As of February 2017, this applies to C5, I3, P2, R4, X1, and m4.16xlarge
    41  	if s.EnableAMIENASupport {
    42  		ui.Say("Enabling Enhanced Networking (ENA)...")
    43  		_, err := ec2conn.ModifyInstanceAttribute(&ec2.ModifyInstanceAttributeInput{
    44  			InstanceId: instance.InstanceId,
    45  			EnaSupport: &ec2.AttributeBooleanValue{Value: aws.Bool(true)},
    46  		})
    47  		if err != nil {
    48  			err := fmt.Errorf("Error enabling Enhanced Networking (ENA) on %s: %s", *instance.InstanceId, err)
    49  			state.Put("error", err)
    50  			ui.Error(err.Error())
    51  			return multistep.ActionHalt
    52  		}
    53  	}
    54  
    55  	return multistep.ActionContinue
    56  }
    57  
    58  func (s *StepModifyEBSBackedInstance) Cleanup(state multistep.StateBag) {
    59  	// No cleanup...
    60  }