func()

in fast-build-update-tool/internal/gamelift/get_instances.go [94:136]


func (g *GameLiftClient) getInstancesInternal(ctx context.Context, fleetId, location string, instances []*Instance, nextToken *string) ([]*Instance, error) {
	describeInstancesInput := &gamelift.DescribeInstancesInput{
		FleetId:   aws.String(fleetId),
		NextToken: nextToken,
	}

	if location != "" {
		describeInstancesInput.Location = aws.String(location)
	}

	instanceOutput, err := g.gamelift.DescribeInstances(ctx, describeInstancesInput)
	if err != nil {
		return instances, fmt.Errorf("error describing instances: %w", err)
	}

	for _, instance := range instanceOutput.Instances {
		// Filter out anything that is not active
		if !strings.EqualFold(string(instance.Status), string(types.InstanceStatusActive)) {
			slog.Debug("instance not active, skipping...", "instanceId", *instance.InstanceId, "status", instance.Status)
			continue
		}

		os, err := operatingSystemLookup(instance.OperatingSystem)
		if err != nil {
			return instances, err
		}

		instances = append(instances, &Instance{
			IpAddress:       *instance.IpAddress,
			InstanceId:      *instance.InstanceId,
			Region:          *instance.Location,
			FleetId:         fleetId,
			OperatingSystem: os,
		})
	}

	// If the results are paginated, fetch the next page
	if instanceOutput.NextToken != nil {
		return g.getInstancesInternal(ctx, fleetId, location, instances, instanceOutput.NextToken)
	}

	return instances, err
}