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
}