github.phpd.cn/hashicorp/packer@v1.3.2/builder/amazon/common/step_modify_ebs_instance.go (about) 1 package common 2 3 import ( 4 "context" 5 "fmt" 6 "strings" 7 8 "github.com/aws/aws-sdk-go/aws" 9 "github.com/aws/aws-sdk-go/service/ec2" 10 "github.com/hashicorp/packer/helper/multistep" 11 "github.com/hashicorp/packer/packer" 12 ) 13 14 type StepModifyEBSBackedInstance struct { 15 EnableAMIENASupport *bool 16 EnableAMISriovNetSupport bool 17 } 18 19 func (s *StepModifyEBSBackedInstance) Run(_ context.Context, state multistep.StateBag) multistep.StepAction { 20 ec2conn := state.Get("ec2").(*ec2.EC2) 21 instance := state.Get("instance").(*ec2.Instance) 22 ui := state.Get("ui").(packer.Ui) 23 24 // Set SriovNetSupport to "simple". See http://goo.gl/icuXh5 25 // As of February 2017, this applies to C3, C4, D2, I2, R3, and M4 (excluding m4.16xlarge) 26 if s.EnableAMISriovNetSupport { 27 ui.Say("Enabling Enhanced Networking (SR-IOV)...") 28 simple := "simple" 29 _, err := ec2conn.ModifyInstanceAttribute(&ec2.ModifyInstanceAttributeInput{ 30 InstanceId: instance.InstanceId, 31 SriovNetSupport: &ec2.AttributeValue{Value: &simple}, 32 }) 33 if err != nil { 34 err := fmt.Errorf("Error enabling Enhanced Networking (SR-IOV) on %s: %s", *instance.InstanceId, err) 35 state.Put("error", err) 36 ui.Error(err.Error()) 37 return multistep.ActionHalt 38 } 39 } 40 41 // Handle EnaSupport flag. 42 // As of February 2017, this applies to C5, I3, P2, R4, X1, and m4.16xlarge 43 if s.EnableAMIENASupport != nil { 44 var prefix string 45 if *s.EnableAMIENASupport { 46 prefix = "En" 47 } else { 48 prefix = "Dis" 49 } 50 ui.Say(fmt.Sprintf("%sabling Enhanced Networking (ENA)...", prefix)) 51 _, err := ec2conn.ModifyInstanceAttribute(&ec2.ModifyInstanceAttributeInput{ 52 InstanceId: instance.InstanceId, 53 EnaSupport: &ec2.AttributeBooleanValue{Value: aws.Bool(*s.EnableAMIENASupport)}, 54 }) 55 if err != nil { 56 err := fmt.Errorf("Error %sabling Enhanced Networking (ENA) on %s: %s", strings.ToLower(prefix), *instance.InstanceId, err) 57 state.Put("error", err) 58 ui.Error(err.Error()) 59 return multistep.ActionHalt 60 } 61 } 62 63 return multistep.ActionContinue 64 } 65 66 func (s *StepModifyEBSBackedInstance) Cleanup(state multistep.StateBag) { 67 // No cleanup... 68 }