func AskInstanceIds()

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
}