delete.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package release
  2. import (
  3. "net/http"
  4. "github.com/porter-dev/porter/api/server/authz"
  5. "github.com/porter-dev/porter/api/server/handlers"
  6. "github.com/porter-dev/porter/api/server/shared"
  7. "github.com/porter-dev/porter/api/server/shared/apierrors"
  8. "github.com/porter-dev/porter/api/server/shared/config"
  9. "github.com/porter-dev/porter/api/types"
  10. "github.com/porter-dev/porter/internal/models"
  11. "helm.sh/helm/v3/pkg/release"
  12. )
  13. type DeleteReleaseHandler struct {
  14. handlers.PorterHandlerReadWriter
  15. authz.KubernetesAgentGetter
  16. }
  17. func NewDeleteReleaseHandler(
  18. config *config.Config,
  19. decoderValidator shared.RequestDecoderValidator,
  20. writer shared.ResultWriter,
  21. ) *DeleteReleaseHandler {
  22. return &DeleteReleaseHandler{
  23. PorterHandlerReadWriter: handlers.NewDefaultPorterHandler(config, decoderValidator, writer),
  24. KubernetesAgentGetter: authz.NewOutOfClusterAgentGetter(config),
  25. }
  26. }
  27. func (c *DeleteReleaseHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
  28. user, _ := r.Context().Value(types.UserScope).(*models.User)
  29. cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
  30. helmRelease, _ := r.Context().Value(types.ReleaseScope).(*release.Release)
  31. helmAgent, err := c.GetHelmAgent(r, cluster, "")
  32. if err != nil {
  33. c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
  34. return
  35. }
  36. _, err = helmAgent.UninstallChart(helmRelease.Name)
  37. if err != nil {
  38. c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
  39. return
  40. }
  41. rel, releaseErr := c.Repo().Release().ReadRelease(cluster.ID, helmRelease.Name, helmRelease.Namespace)
  42. // update the github actions env if the release exists and is built from source
  43. if cName := helmRelease.Chart.Metadata.Name; cName == "job" || cName == "web" || cName == "worker" {
  44. if releaseErr == nil && rel != nil {
  45. gitAction := rel.GitActionConfig
  46. if gitAction != nil && gitAction.ID != 0 {
  47. gaRunner, err := getGARunner(
  48. c.Config(),
  49. user.ID,
  50. cluster.ProjectID,
  51. cluster.ID,
  52. rel.GitActionConfig,
  53. helmRelease.Name,
  54. helmRelease.Namespace,
  55. rel,
  56. helmRelease,
  57. )
  58. if err != nil {
  59. c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
  60. return
  61. }
  62. err = gaRunner.Cleanup()
  63. if err != nil {
  64. c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
  65. return
  66. }
  67. }
  68. }
  69. }
  70. }