func()

in pkg/source/gcp/api/gcp_client.go [304:387]


func (c *GCPClientImpl) GetAnthosOnBaremetalClusterNames(ctx context.Context, projectId string) ([]string, error) {
	type baremetalCluster struct {
		Name string `json:"name"`
		// Ignoreing the other fields...
	}
	type clusterListResponse struct {
		BaremetalClusters []*baremetalCluster `json:"bareMetalClusters"`
		NextPageToken     string              `json:"nextPageToken"`
	}
	type baremetalAdminCluster struct {
		Name string `json:"name"`
		// Ignoreing the other fields...
	}
	type clusterAdminListResponse struct {
		BaremetalAdminClusters []*baremetalAdminCluster `json:"bareMetalAdminClusters"`
		NextPageToken          string                   `json:"nextPageToken"`
	}
	wg := sync.WaitGroup{}
	wg.Add(3)
	resultLock := sync.Mutex{}
	result := make([]string, 0)
	go func() {
		defer wg.Done()
		// Admin cluster can be only registered on the fleet membership.
		// Query fleet membership status as well.
		fleets, err := c.GetFleetMembershipNames(ctx, projectId)
		if err != nil {
			return
		}
		resultLock.Lock()
		defer resultLock.Unlock()
		result = append(result, fleets...)
	}()
	go func() {
		defer wg.Done()
		pc := NewPageClient[clusterListResponse](c.BaseClient)
		clusterLists, err := pc.GetAll(ctx, func(hasToken bool, nextPageToken string) (*http.Request, error) {
			endpoint := fmt.Sprintf("https://gkeonprem.googleapis.com/v1/projects/%s/locations/-/bareMetalClusters", projectId)
			if hasToken {
				endpoint += "?pageToken=" + nextPageToken
			}
			return c.CreateGCPHttpRequest(ctx, "GET", endpoint, nil)
		}, func(response *clusterListResponse) string {
			return response.NextPageToken
		})
		if err != nil {
			return
		}
		resultLock.Lock()
		defer resultLock.Unlock()
		for _, clusters := range clusterLists {
			for _, cluster := range clusters.BaremetalClusters {
				nameSegments := strings.Split(cluster.Name, "/")
				result = append(result, nameSegments[len(nameSegments)-1])
			}
		}
	}()
	go func() {
		defer wg.Done()
		pac := NewPageClient[clusterAdminListResponse](c.BaseClient)
		clusterAdminLists, err := pac.GetAll(ctx, func(hasToken bool, nextPageToken string) (*http.Request, error) {
			endpoint := fmt.Sprintf("https://gkeonprem.googleapis.com/v1/projects/%s/locations/-/bareMetalAdminClusters", projectId)
			if hasToken {
				endpoint += "?pageToken=" + nextPageToken
			}
			return c.CreateGCPHttpRequest(ctx, "GET", endpoint, nil)
		}, func(response *clusterAdminListResponse) string {
			return response.NextPageToken
		})
		if err != nil {
			return
		}
		resultLock.Lock()
		defer resultLock.Unlock()
		for _, cluster := range clusterAdminLists {
			for _, cluster := range cluster.BaremetalAdminClusters {
				nameSegments := strings.Split(cluster.Name, "/")
				result = append(result, nameSegments[len(nameSegments)-1])
			}
		}
	}()
	wg.Wait()
	return result, nil
}