2
0

release.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. package forms
  2. import (
  3. "net/url"
  4. "strconv"
  5. "github.com/porter-dev/porter/internal/helm"
  6. "github.com/porter-dev/porter/internal/repository"
  7. )
  8. // ReleaseForm is the generic base type for CRUD operations on releases
  9. type ReleaseForm struct {
  10. *helm.Form
  11. }
  12. // PopulateHelmOptionsFromQueryParams populates fields in the ReleaseForm using the passed
  13. // url.Values (the parsed query params)
  14. func (rf *ReleaseForm) PopulateHelmOptionsFromQueryParams(
  15. vals url.Values,
  16. repo repository.ClusterRepository,
  17. ) error {
  18. if clusterID, ok := vals["cluster_id"]; ok && len(clusterID) == 1 {
  19. id, err := strconv.ParseUint(clusterID[0], 10, 64)
  20. if err != nil {
  21. return err
  22. }
  23. cluster, err := repo.ReadCluster(uint(id))
  24. if err != nil {
  25. return err
  26. }
  27. rf.Cluster = cluster
  28. }
  29. if namespace, ok := vals["namespace"]; ok && len(namespace) == 1 {
  30. rf.Namespace = namespace[0]
  31. }
  32. if storage, ok := vals["storage"]; ok && len(storage) == 1 {
  33. rf.Storage = storage[0]
  34. }
  35. return nil
  36. }
  37. // ListReleaseForm represents the accepted values for listing Helm releases
  38. type ListReleaseForm struct {
  39. *ReleaseForm
  40. *helm.ListFilter
  41. }
  42. // PopulateListFromQueryParams populates fields in the ListReleaseForm using the passed
  43. // url.Values (the parsed query params)
  44. func (lrf *ListReleaseForm) PopulateListFromQueryParams(
  45. vals url.Values,
  46. _ repository.ClusterRepository,
  47. ) error {
  48. if namespace, ok := vals["namespace"]; ok && len(namespace) == 1 {
  49. lrf.ListFilter.Namespace = namespace[0]
  50. }
  51. if limit, ok := vals["limit"]; ok && len(limit) == 1 {
  52. if limitInt, err := strconv.ParseInt(limit[0], 10, 64); err == nil {
  53. lrf.ListFilter.Limit = int(limitInt)
  54. }
  55. }
  56. if skip, ok := vals["skip"]; ok && len(skip) == 1 {
  57. if skipInt, err := strconv.ParseInt(skip[0], 10, 64); err == nil {
  58. lrf.ListFilter.Skip = int(skipInt)
  59. }
  60. }
  61. if byDate, ok := vals["byDate"]; ok && len(byDate) == 1 {
  62. if byDateBool, err := strconv.ParseBool(byDate[0]); err == nil {
  63. lrf.ListFilter.ByDate = byDateBool
  64. }
  65. }
  66. if statusFilter, ok := vals["statusFilter"]; ok {
  67. lrf.ListFilter.StatusFilter = statusFilter
  68. }
  69. return nil
  70. }
  71. // GetReleaseForm represents the accepted values for getting a single Helm release
  72. type GetReleaseForm struct {
  73. *ReleaseForm
  74. Name string `json:"name" form:"required"`
  75. Revision int `json:"revision"`
  76. }
  77. // ListReleaseHistoryForm represents the accepted values for getting a single Helm release
  78. type ListReleaseHistoryForm struct {
  79. *ReleaseForm
  80. Name string `json:"name" form:"required"`
  81. }
  82. // RollbackReleaseForm represents the accepted values for getting a single Helm release
  83. type RollbackReleaseForm struct {
  84. *ReleaseForm
  85. Name string `json:"name" form:"required"`
  86. Revision int `json:"revision" form:"required"`
  87. }
  88. // UpgradeReleaseForm represents the accepted values for updating a Helm release
  89. type UpgradeReleaseForm struct {
  90. *ReleaseForm
  91. Name string `json:"name" form:"required"`
  92. Values string `json:"values" form:"required"`
  93. ChartVersion string `json:"version"`
  94. }
  95. // ChartTemplateForm represents the accepted values for installing a new chart from a template.
  96. type ChartTemplateForm struct {
  97. TemplateName string `json:"templateName" form:"required"`
  98. ImageURL string `json:"imageURL" form:"required"`
  99. FormValues map[string]interface{} `json:"formValues"`
  100. Name string `json:"name"`
  101. }
  102. // InstallChartTemplateForm represents the accepted values for installing a new chart from a template.
  103. type InstallChartTemplateForm struct {
  104. *ReleaseForm
  105. *ChartTemplateForm
  106. // optional git action config
  107. GithubActionConfig *CreateGitActionOptional `json:"github_action,omitempty"`
  108. }
  109. // UpdateImageForm represents the accepted values for updating a Helm release's image
  110. type UpdateImageForm struct {
  111. *ReleaseForm
  112. ImageRepoURI string `json:"image_repo_uri" form:"required"`
  113. Tag string `json:"tag" form:"required"`
  114. }