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
}