agent.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package kubernetes
  2. import (
  3. "context"
  4. v1 "k8s.io/api/core/v1"
  5. v1Machinery "k8s.io/apimachinery/pkg/apis/meta/v1"
  6. "k8s.io/cli-runtime/pkg/genericclioptions"
  7. "k8s.io/client-go/kubernetes"
  8. )
  9. // Agent is a Kubernetes agent for performing operations that interact with the
  10. // api server
  11. type Agent struct {
  12. RESTClientGetter genericclioptions.RESTClientGetter
  13. Clientset *kubernetes.Clientset
  14. }
  15. // Form represents the options for connecting to a cluster and
  16. // creating an Agent
  17. type Form struct {
  18. KubeConfig []byte
  19. AllowedContexts []string
  20. Context string `json:"context" form:"required"`
  21. ConfigFlags *genericclioptions.ConfigFlags
  22. }
  23. // ToAgent uses the Form to generate an agent
  24. func (h *Form) ToAgent() (*Agent, error) {
  25. // create a client config using the app's helm/kubernetes agents
  26. conf, err := GetRestrictedClientConfigFromBytes(
  27. h.KubeConfig,
  28. h.Context,
  29. h.AllowedContexts,
  30. )
  31. if err != nil {
  32. return nil, err
  33. }
  34. clientConf, err := conf.ClientConfig()
  35. if err != nil {
  36. return nil, err
  37. }
  38. restClientGetter := NewRESTClientGetterFromClientConfig(clientConf)
  39. clientset, err := kubernetes.NewForConfig(clientConf)
  40. if err != nil {
  41. return nil, err
  42. }
  43. return &Agent{restClientGetter, clientset}, nil
  44. }
  45. // ListNamespaces simply lists namespaces
  46. func (a *Agent) ListNamespaces() (*v1.NamespaceList, error) {
  47. return a.Clientset.CoreV1().Namespaces().List(
  48. context.TODO(),
  49. v1Machinery.ListOptions{},
  50. )
  51. }