func()

in pkg/node/node.go [675:709]


func (n Node) FetchKubernetesNodeInstanceIds() ([]string, error) {
	ids := []string{}

	if n.nthConfig.DryRun {
		log.Info().Msgf("Would have retrieved nodes, but dry-run flag was set")
		return ids, nil
	}
	matchingNodes, err := n.drainHelper.Client.CoreV1().Nodes().List(context.TODO(), metav1.ListOptions{})
	if err != nil {
		log.Warn().Msgf("Unable to list Nodes")
		return nil, err
	}

	if matchingNodes == nil || matchingNodes.Items == nil {
		return nil, fmt.Errorf("list nodes success but return empty response")
	}

	for _, node := range matchingNodes.Items {
		// sample providerID: aws:///us-west-2a/i-0abcd1234efgh5678
		parts := strings.Split(node.Spec.ProviderID, "/")
		if len(parts) != 5 {
			log.Warn().Msgf("Invalid providerID format found for node %s: %s (expected format: aws:///region/instance-id)", node.Name, node.Spec.ProviderID)
			continue
		}

		instanceId := parts[len(parts)-1]
		if instanceIDRegex.MatchString(instanceId) {
			ids = append(ids, parts[len(parts)-1])
		} else {
			log.Warn().Msgf("Invalid instance id format found for node %s: %s (expected format: ^i-.*)", node.Name, instanceId)
		}
	}

	return ids, nil
}