in cmd/launch.go [91:218]
func launchInteractive(h *ec2helper.EC2Helper) {
var err error
simpleConfig := config.NewSimpleInfo()
// Override config with flags if applicable
config.OverrideConfigWithFlags(simpleConfig, flagConfig)
if simpleConfig.Region == "" {
// Ask Region
region, err := question.AskRegion(h)
if cli.ShowError(err, "Asking region failed") {
return
}
simpleConfig.Region = *region
}
h.ChangeRegion(simpleConfig.Region)
// Ask Launch Template
launchTemplateId := &simpleConfig.LaunchTemplateId
if simpleConfig.LaunchTemplateId == "" {
launchTemplateId = question.AskLaunchTemplate(h)
}
if *launchTemplateId != cli.ResponseNo {
// Use a launch template in this case.
simpleConfig.LaunchTemplateId = *launchTemplateId
UseLaunchTemplate(h, simpleConfig)
return
}
// Not using a launch template if the program is not terminated at the point
if simpleConfig.InstanceType == "" && !ReadInstanceType(h, simpleConfig) {
return
}
// Ask for image ID, auto-termination timer, and keeping EBS volumes after instance termination
if simpleConfig.ImageId == "" && !ReadImageId(h, simpleConfig) {
return
}
// Ask for network configuration
if (simpleConfig.SubnetId == "" || simpleConfig.SecurityGroupIds == nil) &&
!ReadNetworkConfiguration(h, simpleConfig) {
return
}
// Ask for IAM profile
if simpleConfig.IamInstanceProfile == "" && !ReadIamProfile(h, simpleConfig) {
return
}
// Ask for user boot data
if simpleConfig.BootScriptFilePath == "" && !ReadBootScript(h, simpleConfig) {
return
}
// Ask for tags
if len(simpleConfig.UserTags) == 0 && !ReadUserTags(h, simpleConfig) {
return
}
// Ask for confirmation or modification. Keep asking until the config is confirmed or denied
var detailedConfig *config.DetailedInfo
var confirmation string
for {
// Parse config first
detailedConfig, err = h.ParseConfig(simpleConfig)
if cli.ShowError(err, "Parsing config failed") {
return
}
// Ask for confirmation or modification
confirmation = question.AskConfirmationWithInput(simpleConfig, detailedConfig, true)
// The users have confirmed or denied the config
if confirmation == cli.ResponseYes || confirmation == cli.ResponseNo {
break
}
switch confirmation {
// Ask questions to modify the config
case cli.ResourceVpc:
if !ReadNetworkConfiguration(h, simpleConfig) {
return
}
case cli.ResourceSubnet:
if !ReadSubnet(h, simpleConfig, *detailedConfig.Subnet.VpcId) {
return
}
case cli.ResourceSubnetPlaceholder:
if !ReadSubnetPlaceholder(h, simpleConfig) {
return
}
case cli.ResourceSecurityGroup:
if !ReadSecurityGroups(h, simpleConfig, *detailedConfig.Subnet.VpcId) {
return
}
case cli.ResourceSecurityGroupPlaceholder:
if !ReadSecurityGroupPlaceholder(h, simpleConfig) {
return
}
case cli.ResourceInstanceType:
if !ReadInstanceType(h, simpleConfig) {
return
}
if !ReadImageId(h, simpleConfig) {
return
}
case cli.ResourceImage:
if !ReadImageId(h, simpleConfig) {
return
}
case cli.ResourceKeepEbsVolume:
ReadKeepEbsVolume(simpleConfig)
case cli.ResourceAutoTerminationTimer:
if !ReadAutoTerminationTimer(simpleConfig) {
return
}
}
}
// Launch the instance.
_, err = h.LaunchInstance(simpleConfig, detailedConfig, confirmation == cli.ResponseYes)
if cli.ShowError(err, "Launching instance failed") {
return
}
ReadSaveConfig(simpleConfig)
}