helpers.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package stack
  2. import (
  3. "github.com/porter-dev/porter/api/server/shared/config"
  4. "github.com/porter-dev/porter/api/types"
  5. "github.com/porter-dev/porter/internal/helm"
  6. "github.com/porter-dev/porter/internal/helm/loader"
  7. "github.com/porter-dev/porter/internal/models"
  8. "helm.sh/helm/v3/pkg/release"
  9. )
  10. type applyAppResourceOpts struct {
  11. config *config.Config
  12. projectID uint
  13. namespace string
  14. cluster *models.Cluster
  15. helmAgent *helm.Agent
  16. request *types.CreateStackAppResourceRequest
  17. registries []*models.Registry
  18. stack *models.Stack
  19. }
  20. func applyAppResource(opts *applyAppResourceOpts) (*release.Release, error) {
  21. if opts.request.TemplateVersion == "latest" {
  22. opts.request.TemplateVersion = ""
  23. }
  24. chart, err := loader.LoadChartPublic(opts.request.TemplateRepoURL, opts.request.TemplateName, opts.request.TemplateVersion)
  25. if err != nil {
  26. return nil, err
  27. }
  28. conf := &helm.InstallChartConfig{
  29. Chart: chart,
  30. Name: opts.request.Name,
  31. Namespace: opts.namespace,
  32. Values: opts.request.Values,
  33. Cluster: opts.cluster,
  34. Repo: opts.config.Repo,
  35. Registries: opts.registries,
  36. }
  37. if conf.Values == nil {
  38. conf.Values = make(map[string]interface{})
  39. }
  40. conf.Values["stack"] = map[string]interface{}{
  41. "enabled": true,
  42. "name": opts.stack.Name,
  43. "revision": opts.stack.Revisions[0].RevisionNumber,
  44. }
  45. return opts.helmAgent.InstallChart(conf, opts.config.DOConf)
  46. }
  47. type rollbackAppResourceOpts struct {
  48. helmAgent *helm.Agent
  49. helmRevisionID uint
  50. name string
  51. }
  52. func rollbackAppResource(opts *rollbackAppResourceOpts) error {
  53. return opts.helmAgent.RollbackRelease(opts.name, int(opts.helmRevisionID))
  54. }
  55. type updateAppResourceTagOpts struct {
  56. helmAgent *helm.Agent
  57. name, tag string
  58. config *config.Config
  59. projectID uint
  60. namespace string
  61. cluster *models.Cluster
  62. registries []*models.Registry
  63. }
  64. func updateAppResourceTag(opts *updateAppResourceTagOpts) error {
  65. // read the current release to get the current values
  66. rel, err := opts.helmAgent.GetRelease(opts.name, 0, true)
  67. if err != nil {
  68. return err
  69. }
  70. imagePre := rel.Config["image"]
  71. image := imagePre.(map[string]interface{})
  72. image["tag"] = opts.tag
  73. rel.Config["image"] = image
  74. conf := &helm.UpgradeReleaseConfig{
  75. Name: opts.name,
  76. Cluster: opts.cluster,
  77. Repo: opts.config.Repo,
  78. Registries: opts.registries,
  79. Values: rel.Config,
  80. }
  81. _, err = opts.helmAgent.UpgradeReleaseByValues(conf, opts.config.DOConf)
  82. return err
  83. }
  84. type deleteAppResourceOpts struct {
  85. helmAgent *helm.Agent
  86. name string
  87. }
  88. func deleteAppResource(opts *deleteAppResourceOpts) error {
  89. _, err := opts.helmAgent.UninstallChart(opts.name)
  90. return err
  91. }
  92. // func setValuesWithSourceConfig(values map[string]interface{}, sourceConfig )