helpers.go 3.5 KB

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