enable no_ephemeral for spot devices, clean up ranging behavior, update docs
This commit is contained in:
parent
08e97ba4d8
commit
67c3373107
|
@ -127,10 +127,9 @@ func (s *StepRunSourceInstance) Run(ctx context.Context, state multistep.StateBa
|
|||
// don't clutter up console views and cause confusion.
|
||||
log.Printf("no_ephemeral was set, so creating drives xvdca-xvdcz as empty mappings")
|
||||
DefaultEphemeralDeviceLetters := "abcdefghijklmnopqrstuvwxyz"
|
||||
for i := 0; i < len(DefaultEphemeralDeviceLetters); i++ {
|
||||
|
||||
for _, letter := range DefaultEphemeralDeviceLetters {
|
||||
bd := &ec2.BlockDeviceMapping{
|
||||
DeviceName: aws.String("xvdc" + string(DefaultEphemeralDeviceLetters[i])),
|
||||
DeviceName: aws.String("xvdc" + string(letter)),
|
||||
NoDevice: aws.String(""),
|
||||
}
|
||||
runOpts.BlockDeviceMappings = append(runOpts.BlockDeviceMappings, bd)
|
||||
|
|
|
@ -41,12 +41,32 @@ type StepRunSpotInstance struct {
|
|||
UserData string
|
||||
UserDataFile string
|
||||
Ctx interpolate.Context
|
||||
NoEphemeral bool
|
||||
|
||||
instanceId string
|
||||
}
|
||||
|
||||
func (s *StepRunSpotInstance) CreateTemplateData(userData *string, az string,
|
||||
state multistep.StateBag, marketOptions *ec2.LaunchTemplateInstanceMarketOptionsRequest) *ec2.RequestLaunchTemplateData {
|
||||
blockDeviceMappings := s.LaunchMappings.BuildEC2BlockDeviceMappings()
|
||||
if s.NoEphemeral {
|
||||
// This is only relevant for windows guests. Ephemeral drives by
|
||||
// default are assigned to drive names xvdca-xvdcz.
|
||||
// When vms are launched from the AWS console, they're automatically
|
||||
// removed from the block devices if the user hasn't said to use them,
|
||||
// but the SDK does not perform this cleanup. The following code just
|
||||
// manually removes the ephemeral drives from the mapping so that they
|
||||
// don't clutter up console views and cause confusion.
|
||||
log.Printf("no_ephemeral was set, so creating drives xvdca-xvdcz as empty mappings")
|
||||
DefaultEphemeralDeviceLetters := "abcdefghijklmnopqrstuvwxyz"
|
||||
for _, letter := range DefaultEphemeralDeviceLetters {
|
||||
bd := &ec2.BlockDeviceMapping{
|
||||
DeviceName: aws.String("xvdc" + string(letter)),
|
||||
NoDevice: aws.String(""),
|
||||
}
|
||||
blockDeviceMappings = append(blockDeviceMappings, bd)
|
||||
}
|
||||
}
|
||||
// Convert the BlockDeviceMapping into a
|
||||
// LaunchTemplateBlockDeviceMappingRequest. These structs are identical,
|
||||
// except for the EBS field -- on one, that field contains a
|
||||
|
@ -55,7 +75,6 @@ func (s *StepRunSpotInstance) CreateTemplateData(userData *string, az string,
|
|||
// LaunchTemplateEbsBlockDeviceRequest structs are themselves
|
||||
// identical except for the struct's name, so you can cast one directly
|
||||
// into the other.
|
||||
blockDeviceMappings := s.LaunchMappings.BuildEC2BlockDeviceMappings()
|
||||
var launchMappingRequests []*ec2.LaunchTemplateBlockDeviceMappingRequest
|
||||
for _, mapping := range blockDeviceMappings {
|
||||
launchRequest := &ec2.LaunchTemplateBlockDeviceMappingRequest{
|
||||
|
|
|
@ -53,11 +53,15 @@ type Config struct {
|
|||
// engine](/docs/templates/engine.html), see [Build template
|
||||
// data](#build-template-data) for more information.
|
||||
VolumeRunTags awscommon.TagMap `mapstructure:"run_volume_tags"`
|
||||
// If you set this flag, we'll add clauses to the
|
||||
// launch_block_device_mappings that make sure ephemeral drives don't show
|
||||
// up in the EC2 console. If you launched from the EC2 console, you'd get
|
||||
// this automatically, but the SDK does not provide this service.
|
||||
// This only applies when you are not running spot instances.
|
||||
// Relevant only to Windows guests: If you set this flag, we'll add clauses
|
||||
// to the launch_block_device_mappings that make sure ephemeral drives
|
||||
// don't show up in the EC2 console. If you launched from the EC2 console,
|
||||
// you'd get this automatically, but the SDK does not provide this service.
|
||||
// For more information, see
|
||||
// https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/InstanceStorage.html.
|
||||
// Because we don't validate the OS type of your guest, it is up to you to
|
||||
// make sure you don't set this for *nix guests; behavior may be
|
||||
// unpredictable.
|
||||
NoEphemeral bool `mapstructure:"no_ephemeral" required:"false"`
|
||||
|
||||
ctx interpolate.Context
|
||||
|
|
|
@ -22,9 +22,13 @@
|
|||
engine](/docs/templates/engine.html), see [Build template
|
||||
data](#build-template-data) for more information.
|
||||
|
||||
- `no_ephemeral` (bool) - If you set this flag, we'll add clauses to the
|
||||
launch_block_device_mappings that make sure ephemeral drives don't show
|
||||
up in the EC2 console. If you launched from the EC2 console, you'd get
|
||||
this automatically, but the SDK does not provide this service.
|
||||
This only applies when you are not running spot instances.
|
||||
- `no_ephemeral` (bool) - Relevant only to Windows guests: If you set this flag, we'll add clauses
|
||||
to the launch_block_device_mappings that make sure ephemeral drives
|
||||
don't show up in the EC2 console. If you launched from the EC2 console,
|
||||
you'd get this automatically, but the SDK does not provide this service.
|
||||
For more information, see
|
||||
https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/InstanceStorage.html.
|
||||
Because we don't validate the OS type of your guest, it is up to you to
|
||||
make sure you don't set this for *nix guests; behavior may be
|
||||
unpredictable.
|
||||
|
Loading…
Reference in New Issue