func retrieveAssignmentReservation()

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
}