in pkg/ec2helper/ec2helper.go [987:1059]
func getRunInstanceInput(simpleConfig *config.SimpleInfo, detailedConfig *config.DetailedInfo) *ec2.RunInstancesInput {
input := &ec2.RunInstancesInput{
MaxCount: aws.Int64(1),
MinCount: aws.Int64(1),
}
// Add launch template if present
if simpleConfig.LaunchTemplateId != "" {
input.LaunchTemplate = &ec2.LaunchTemplateSpecification{
LaunchTemplateId: aws.String(simpleConfig.LaunchTemplateId),
Version: aws.String(simpleConfig.LaunchTemplateVersion),
}
}
//Override settings if applicable
if simpleConfig.ImageId != "" {
input.ImageId = aws.String(simpleConfig.ImageId)
}
if simpleConfig.InstanceType != "" {
input.InstanceType = aws.String(simpleConfig.InstanceType)
}
if simpleConfig.SubnetId != "" {
input.SubnetId = aws.String(simpleConfig.SubnetId)
}
if simpleConfig.SecurityGroupIds != nil && len(simpleConfig.SecurityGroupIds) > 0 {
input.SecurityGroupIds = aws.StringSlice(simpleConfig.SecurityGroupIds)
}
if simpleConfig.IamInstanceProfile != "" {
input.IamInstanceProfile = &ec2.IamInstanceProfileSpecification{
Name: aws.String(simpleConfig.IamInstanceProfile),
}
}
setAutoTermination := false
if detailedConfig != nil {
// Set all EBS volumes not to be deleted, if specified
if HasEbsVolume(detailedConfig.Image) && simpleConfig.KeepEbsVolumeAfterTermination {
input.BlockDeviceMappings = detailedConfig.Image.BlockDeviceMappings
for _, block := range input.BlockDeviceMappings {
if block.Ebs != nil {
block.Ebs.DeleteOnTermination = aws.Bool(false)
}
}
}
setAutoTermination = IsLinux(*detailedConfig.Image.PlatformDetails) && simpleConfig.AutoTerminationTimerMinutes > 0
}
if setAutoTermination {
input.InstanceInitiatedShutdownBehavior = aws.String("terminate")
autoTermCmd := fmt.Sprintf("#!/bin/bash\necho \"sudo poweroff\" | at now + %d minutes\n",
simpleConfig.AutoTerminationTimerMinutes)
if simpleConfig.BootScriptFilePath == "" {
input.UserData = aws.String(base64.StdEncoding.EncodeToString([]byte(autoTermCmd)))
} else {
bootScriptRaw, _ := ioutil.ReadFile(simpleConfig.BootScriptFilePath)
bootScriptLines := strings.Split(string(bootScriptRaw), "\n")
//if #!/bin/bash is first, then replace first line otherwise, prepend termination
if len(bootScriptLines) >= 1 && bootScriptLines[0] == "#!/bin/bash" {
bootScriptLines[0] = autoTermCmd
} else {
bootScriptLines = append([]string{autoTermCmd}, bootScriptLines...)
}
bootScriptRaw = []byte(strings.Join(bootScriptLines, "\n"))
input.UserData = aws.String(base64.StdEncoding.EncodeToString(bootScriptRaw))
}
} else {
if simpleConfig.BootScriptFilePath != "" {
bootScriptRaw, _ := ioutil.ReadFile(simpleConfig.BootScriptFilePath)
input.UserData = aws.String(base64.StdEncoding.EncodeToString(bootScriptRaw))
}
}
return input
}