MCPcopy
hub / github.com/1Panel-dev/KubePi / fetchMultiNamespaceResource

Function fetchMultiNamespaceResource

internal/api/v1/proxy/proxy.go:378–430  ·  view source on GitHub ↗
(client *http.Client, namespaces []string, apiUrl url.URL)

Source from the content-addressed store, hash-verified

376}
377
378func fetchMultiNamespaceResource(client *http.Client, namespaces []string, apiUrl url.URL) (*NamespaceResourceContainer, error) {
379 wg := &sync.WaitGroup{}
380 var mergedContainer NamespaceResourceContainer
381 var responses []*http.Response
382 var es []error
383 for i := range namespaces {
384 wg.Add(1)
385 ns := namespaces[i]
386 go func() {
387 newUrl := apiUrl
388 newUrl.Path = addUrlNamespace(apiUrl.Path, ns)
389 resp, err := client.Get(newUrl.String())
390 if err != nil {
391 es = append(es, err)
392 wg.Done()
393 return
394 }
395 responses = append(responses, resp)
396 wg.Done()
397 }()
398
399 }
400 wg.Wait()
401 var forbidden int
402 var forbiddenMessage []string
403 for i := range responses {
404 r := responses[i]
405 body, err := ioutil.ReadAll(r.Body)
406 if err != nil {
407 return nil, err
408 }
409 if r.StatusCode != http.StatusOK {
410 if r.StatusCode == http.StatusForbidden {
411 forbidden++
412 forbiddenMessage = append(forbiddenMessage, string(body))
413 continue
414 } else {
415 return nil, errors.New(string(body))
416 }
417 }
418 var nc NamespaceResourceContainer
419 if err := json.Unmarshal(body, &nc); err != nil {
420 return nil, err
421 }
422 mergedContainer.TypeMeta = nc.TypeMeta
423 mergedContainer.ListMeta = nc.ListMeta
424 mergedContainer.Items = append(mergedContainer.Items, nc.Items...)
425 }
426 if len(namespaces) == 1 && forbidden == 1 {
427 return nil, errors.New(strings.Join(forbiddenMessage, ""))
428 }
429 return &mergedContainer, nil
430}
431
432func (h *Handler) generateTLSTransport(c *v1Cluster.Cluster, profile session.UserProfile) (http.RoundTripper, error) {
433 if profile.IsAdministrator {

Callers 1

KubernetesAPIProxyMethod · 0.85

Calls 4

addUrlNamespaceFunction · 0.85
AddMethod · 0.65
GetMethod · 0.65
NewMethod · 0.65

Tested by

no test coverage detected