helpers.go 3.0 KB

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