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 }