helpers.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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. stack *models.Stack
  64. }
  65. func updateAppResourceTag(opts *updateAppResourceTagOpts) error {
  66. // read the current release to get the current values
  67. rel, err := opts.helmAgent.GetRelease(opts.name, 0, true)
  68. if err != nil {
  69. return err
  70. }
  71. imagePre := rel.Config["image"]
  72. image := imagePre.(map[string]interface{})
  73. image["tag"] = opts.tag
  74. rel.Config["image"] = image
  75. conf := &helm.UpgradeReleaseConfig{
  76. Name: opts.name,
  77. Cluster: opts.cluster,
  78. Repo: opts.config.Repo,
  79. Registries: opts.registries,
  80. Values: rel.Config,
  81. Stack: opts.stack,
  82. }
  83. _, err = opts.helmAgent.UpgradeReleaseByValues(conf, opts.config.DOConf)
  84. return err
  85. }
  86. type deleteAppResourceOpts struct {
  87. helmAgent *helm.Agent
  88. name string
  89. }
  90. func deleteAppResource(opts *deleteAppResourceOpts) error {
  91. _, err := opts.helmAgent.UninstallChart(opts.name)
  92. return err
  93. }
  94. // func setValuesWithSourceConfig(values map[string]interface{}, sourceConfig )