helm-wrapper.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package api
  2. import (
  3. "dag-jupyter/internal/types"
  4. "fmt"
  5. "github.com/parnurzeal/gorequest"
  6. "github.com/zeromicro/go-zero/core/logx"
  7. )
  8. type Resp struct {
  9. Code int `json:"code"`
  10. Data interface{} `json:"data,omitempty"`
  11. Error string `json:"error,omitempty"`
  12. }
  13. type StatusResp struct {
  14. Code int `json:"code"`
  15. Data []*types.ReleaseStatus `json:"data,omitempty"`
  16. Error string `json:"error,omitempty"`
  17. }
  18. const url = "http://localhost:8081"
  19. // const url = "http://192.168.199.109:18080"
  20. func genParam(req *types.CreateJupyterInfo) map[string]interface{} {
  21. settings := make([]string, 0, 16)
  22. settings = append(settings, fmt.Sprintf("ingress.jupyterlab.hosts[0].host=%s", req.Host))
  23. settings = append(settings, fmt.Sprintf("ingress.jupyterlab.hosts[0].paths[0].path=%s", req.Path))
  24. settings = append(settings, fmt.Sprintf("ingress.jupyterlab.hosts[0].paths[0].pathType=%s", req.PathType))
  25. logx.Info(req.IngressClass, "------- len: ", len(req.IngressClass))
  26. if len(req.IngressClass) > 0 {
  27. // ingressClass, _ := json.Marshal(map[string]string{
  28. // "kubernetes.io/ingress.class": req.IngressClass,
  29. // })
  30. settings = append(settings, fmt.Sprintf("ingress.jupyterlab.annotations.kubernetes\\.io/ingress\\.class=%s", req.IngressClass))
  31. settings = append(settings, fmt.Sprintf("ingress.jupyterlab.annotations.nginx\\.ingress\\.kubernetes\\.io/proxy-body-size=%s", "8192m"))
  32. }
  33. settings = append(settings, fmt.Sprintf("jupyterlab.image.repository=%s", req.Image))
  34. settings = append(settings, fmt.Sprintf("jupyterlab.image.tag=%s", req.Tag))
  35. settings = append(settings, fmt.Sprintf("jupyterlab.config.baseUrl=%s", req.BaseUrl))
  36. settings = append(settings, fmt.Sprintf("jupyterlab.config.workspace=%s", req.Workspace))
  37. settings = append(settings, fmt.Sprintf("jupyterlab.config.password=%s", req.Password))
  38. m := map[string]interface{}{
  39. "dry_run": false,
  40. "create_namespace": false,
  41. "set": settings,
  42. }
  43. return m
  44. }
  45. func Install(req *types.CreateJupyterInfo) error {
  46. m := genParam(req)
  47. request := gorequest.New()
  48. var resp Resp
  49. _, _, errs := request.Post(fmt.Sprintf("%s/api/namespaces/%s/releases/%s?chart=%s", url, req.Namespace, req.ReleaseName, req.Chart)).SendMap(m).EndStruct(&resp)
  50. if len(errs) != 0 {
  51. return fmt.Errorf("helm install error: %s", errs[0])
  52. }
  53. if resp.Code != 0 {
  54. return fmt.Errorf("helm install error: %s", resp.Error)
  55. }
  56. logx.Info("helm install success~~")
  57. return nil
  58. }
  59. func Uninstall(req *types.DeleteJupyterInfo) error {
  60. request := gorequest.New()
  61. var resp Resp
  62. _, _, errs := request.Delete(fmt.Sprintf("%s/api/namespaces/%s/releases/%s", url, req.Namespace, req.ReleaseName)).EndStruct(&resp)
  63. if len(errs) != 0 {
  64. return fmt.Errorf("helm uninstall error: %s", errs[0])
  65. }
  66. if resp.Code != 0 {
  67. return fmt.Errorf("helm uninstall error: %s", resp.Error)
  68. }
  69. logx.Info("helm uninstall success~~")
  70. return nil
  71. }
  72. func Upgrade(req *types.CreateJupyterInfo) error {
  73. m := genParam(req)
  74. request := gorequest.New()
  75. var resp Resp
  76. _, _, errs := request.Put(fmt.Sprintf("%s/api/namespaces/%s/releases/%s?chart=%s", url, req.Namespace, req.ReleaseName, req.Chart)).SendMap(m).EndStruct(&resp)
  77. if len(errs) != 0 {
  78. return fmt.Errorf("helm upgrade error: %s", errs[0])
  79. }
  80. if resp.Code != 0 {
  81. return fmt.Errorf("helm upgrade error: %s", resp.Error)
  82. }
  83. logx.Info("helm upgrade success~~")
  84. return nil
  85. }
  86. func Status(req *types.ReleaseInfo) ([]*types.ReleaseStatus, error) {
  87. var resp StatusResp
  88. request := gorequest.New()
  89. m := map[string]string{
  90. "filter": req.Filter,
  91. }
  92. _, _, errs := request.Get(fmt.Sprintf("%s/api/namespaces/%s/releases", url, req.Namespace)).SendMap(m).EndStruct(&resp)
  93. if len(errs) != 0 {
  94. return nil, fmt.Errorf("helm status error: %s", errs[0])
  95. }
  96. if resp.Code != 0 {
  97. return nil, fmt.Errorf("helm status error: %s", resp.Error)
  98. }
  99. logx.Info("helm status success~~")
  100. return resp.Data, nil
  101. }