in src/statequery/assignments.go [64:106]
func retrieveAssignmentReservation(ctx context.Context, resClient *reservationSDK.Client, manClient *cloudresourcemanagerSDK.Service, cache *Cache, project string, state *State, reservation Reservation, wg *sync.WaitGroup) {
// Defer completion signal on wait group
defer wg.Done()
// Create request on specific (regional) reservation
request := &reservationPB.ListAssignmentsRequest{
Parent: fmt.Sprintf("projects/%s/locations/%s/reservations/%s", project, reservation.Location, reservation.Name),
}
// Execute API call and depaginate responses
it := resClient.ListAssignments(ctx, request)
for {
response, err := it.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Printf("error retrieving assignments: %v\n", err)
break
}
log.Printf("found assignment: %s\n", response.Name)
// Break up full assignee ID
tokens := strings.Split(response.Assignee, "/")
assigneeType := tokens[0]
assigneeName := tokens[1]
// Retrieve all project children under an assignee
children, err := retrieveResourceChildren(manClient, cache, assigneeType, assigneeName)
if err != nil {
log.Printf("error retrieving project children: %v\n", err)
}
// Add all project children to the state
reservation.Projects = append(reservation.Projects, children...)
}
// Remove duplicates
reservation.Projects = trimDuplicates(reservation.Projects)
id := fmt.Sprintf("%s.%s", reservation.Location, reservation.Name)
state.Reservations[id] = reservation
}