in pkg/question/question.go [1093:1143]
func AskInstanceIds(h *ec2helper.EC2Helper, addedInstanceIds []string) (*string, error) {
// Only include non-terminated states
states := []string{
ec2.InstanceStateNamePending,
ec2.InstanceStateNameRunning,
ec2.InstanceStateNameStopping,
ec2.InstanceStateNameStopped,
}
instances, err := h.GetInstancesByState(states)
if err != nil {
return nil, err
}
data := [][]string{}
indexedOptions := []string{}
data, indexedOptions, finalCounter := table.AppendInstances(data, indexedOptions, instances,
addedInstanceIds)
// There are no instances available for termination in selected region
if len(data) <= 0 && len(addedInstanceIds) == 0 {
return nil, errors.New("No instance available in selected region for termination")
}
// Since no more instance(s) are available for termination, proceed with current selection
if len(data) == 0 && len(addedInstanceIds) > 0 {
return nil, nil
}
// Add "done" option, if instance(s) are already selected
if len(addedInstanceIds) > 0 {
indexedOptions = append(indexedOptions, cli.ResponseNo)
data = append(data, []string{fmt.Sprintf("%d.", finalCounter+1),
"Don't add any more instance id"})
}
optionsText := table.BuildTable(data, []string{"Option", "Instance", "Tag-Key", "Tag-Value"})
question := "Select the instance you want to terminate: "
if len(addedInstanceIds) > 0 {
question = "If you wish to terminate multiple instance(s), add from the following: "
}
answer := AskQuestion(&AskQuestionInput{
QuestionString: question,
OptionsString: &optionsText,
IndexedOptions: indexedOptions,
})
return &answer, err
}