Allow users to build hvm images from pv images to have ena_support
This commit is contained in:
parent
5542b2b34a
commit
902497d6ce
|
@ -223,6 +223,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
EnableAMISriovNetSupport: b.config.AMISriovNetSupport,
|
EnableAMISriovNetSupport: b.config.AMISriovNetSupport,
|
||||||
EnableAMIENASupport: b.config.AMIENASupport,
|
EnableAMIENASupport: b.config.AMIENASupport,
|
||||||
AmiFilters: b.config.SourceAmiFilter,
|
AmiFilters: b.config.SourceAmiFilter,
|
||||||
|
AMIVirtType: b.config.AMIVirtType,
|
||||||
},
|
},
|
||||||
&StepCheckRootDevice{},
|
&StepCheckRootDevice{},
|
||||||
)
|
)
|
||||||
|
|
|
@ -21,6 +21,7 @@ type StepSourceAMIInfo struct {
|
||||||
SourceAmi string
|
SourceAmi string
|
||||||
EnableAMISriovNetSupport bool
|
EnableAMISriovNetSupport bool
|
||||||
EnableAMIENASupport bool
|
EnableAMIENASupport bool
|
||||||
|
AMIVirtType string
|
||||||
AmiFilters AmiFilterOptions
|
AmiFilters AmiFilterOptions
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,11 +106,13 @@ func (s *StepSourceAMIInfo) Run(_ context.Context, state multistep.StateBag) mul
|
||||||
|
|
||||||
// Enhanced Networking can only be enabled on HVM AMIs.
|
// Enhanced Networking can only be enabled on HVM AMIs.
|
||||||
// See http://goo.gl/icuXh5
|
// See http://goo.gl/icuXh5
|
||||||
if (s.EnableAMIENASupport || s.EnableAMISriovNetSupport) && *image.VirtualizationType != "hvm" {
|
if s.EnableAMIENASupport || s.EnableAMISriovNetSupport {
|
||||||
err := fmt.Errorf("Cannot enable enhanced networking, source AMI '%s' is not HVM", s.SourceAmi)
|
err = s.canEnableEnhancedNetworking(image)
|
||||||
state.Put("error", err)
|
if err != nil {
|
||||||
ui.Error(err.Error())
|
state.Put("error", err)
|
||||||
return multistep.ActionHalt
|
ui.Error(err.Error())
|
||||||
|
return multistep.ActionHalt
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
state.Put("source_image", image)
|
state.Put("source_image", image)
|
||||||
|
@ -117,3 +120,16 @@ func (s *StepSourceAMIInfo) Run(_ context.Context, state multistep.StateBag) mul
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *StepSourceAMIInfo) Cleanup(multistep.StateBag) {}
|
func (s *StepSourceAMIInfo) Cleanup(multistep.StateBag) {}
|
||||||
|
|
||||||
|
func (s *StepSourceAMIInfo) canEnableEnhancedNetworking(image *ec2.Image) error {
|
||||||
|
if s.AMIVirtType == "hvm" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if s.AMIVirtType != "" {
|
||||||
|
return fmt.Errorf("Cannot enable enhanced networking, AMIVirtType '%s' is not HVM", s.AMIVirtType)
|
||||||
|
}
|
||||||
|
if *image.VirtualizationType != "hvm" {
|
||||||
|
return fmt.Errorf("Cannot enable enhanced networking, source AMI '%s' is not HVM", s.SourceAmi)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
package common
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/service/ec2"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestStepSourceAmiInfo_PVImage(t *testing.T) {
|
||||||
|
err := new(StepSourceAMIInfo).canEnableEnhancedNetworking(&ec2.Image{
|
||||||
|
VirtualizationType: aws.String("paravirtual"),
|
||||||
|
})
|
||||||
|
assert.Error(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestStepSourceAmiInfo_HVMImage(t *testing.T) {
|
||||||
|
err := new(StepSourceAMIInfo).canEnableEnhancedNetworking(&ec2.Image{
|
||||||
|
VirtualizationType: aws.String("hvm"),
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestStepSourceAmiInfo_PVImageWithAMIVirtPV(t *testing.T) {
|
||||||
|
stepSourceAMIInfo := StepSourceAMIInfo{
|
||||||
|
AMIVirtType: "paravirtual",
|
||||||
|
}
|
||||||
|
err := stepSourceAMIInfo.canEnableEnhancedNetworking(&ec2.Image{
|
||||||
|
VirtualizationType: aws.String("paravirtual"),
|
||||||
|
})
|
||||||
|
assert.Error(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestStepSourceAmiInfo_PVImageWithAMIVirtHVM(t *testing.T) {
|
||||||
|
stepSourceAMIInfo := StepSourceAMIInfo{
|
||||||
|
AMIVirtType: "hvm",
|
||||||
|
}
|
||||||
|
err := stepSourceAMIInfo.canEnableEnhancedNetworking(&ec2.Image{
|
||||||
|
VirtualizationType: aws.String("paravirtual"),
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
}
|
|
@ -177,6 +177,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
EnableAMISriovNetSupport: b.config.AMISriovNetSupport,
|
EnableAMISriovNetSupport: b.config.AMISriovNetSupport,
|
||||||
EnableAMIENASupport: b.config.AMIENASupport,
|
EnableAMIENASupport: b.config.AMIENASupport,
|
||||||
AmiFilters: b.config.SourceAmiFilter,
|
AmiFilters: b.config.SourceAmiFilter,
|
||||||
|
AMIVirtType: b.config.AMIVirtType,
|
||||||
},
|
},
|
||||||
&awscommon.StepKeyPair{
|
&awscommon.StepKeyPair{
|
||||||
Debug: b.config.PackerDebug,
|
Debug: b.config.PackerDebug,
|
||||||
|
|
|
@ -194,6 +194,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
EnableAMISriovNetSupport: b.config.AMISriovNetSupport,
|
EnableAMISriovNetSupport: b.config.AMISriovNetSupport,
|
||||||
EnableAMIENASupport: b.config.AMIENASupport,
|
EnableAMIENASupport: b.config.AMIENASupport,
|
||||||
AmiFilters: b.config.SourceAmiFilter,
|
AmiFilters: b.config.SourceAmiFilter,
|
||||||
|
AMIVirtType: b.config.AMIVirtType,
|
||||||
},
|
},
|
||||||
&awscommon.StepKeyPair{
|
&awscommon.StepKeyPair{
|
||||||
Debug: b.config.PackerDebug,
|
Debug: b.config.PackerDebug,
|
||||||
|
|
|
@ -255,6 +255,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
EnableAMISriovNetSupport: b.config.AMISriovNetSupport,
|
EnableAMISriovNetSupport: b.config.AMISriovNetSupport,
|
||||||
EnableAMIENASupport: b.config.AMIENASupport,
|
EnableAMIENASupport: b.config.AMIENASupport,
|
||||||
AmiFilters: b.config.SourceAmiFilter,
|
AmiFilters: b.config.SourceAmiFilter,
|
||||||
|
AMIVirtType: b.config.AMIVirtType,
|
||||||
},
|
},
|
||||||
&awscommon.StepKeyPair{
|
&awscommon.StepKeyPair{
|
||||||
Debug: b.config.PackerDebug,
|
Debug: b.config.PackerDebug,
|
||||||
|
|
Loading…
Reference in New Issue