agent.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package helm
  2. import (
  3. "fmt"
  4. "helm.sh/helm/v3/pkg/action"
  5. "helm.sh/helm/v3/pkg/release"
  6. "k8s.io/helm/pkg/chartutil"
  7. )
  8. // Agent is a Helm agent for performing helm operations
  9. type Agent struct {
  10. ActionConfig *action.Configuration
  11. }
  12. // ListReleases lists releases based on a ListFilter
  13. func (a *Agent) ListReleases(
  14. namespace string,
  15. filter *ListFilter,
  16. ) ([]*release.Release, error) {
  17. cmd := action.NewList(a.ActionConfig)
  18. filter.apply(cmd)
  19. return cmd.Run()
  20. }
  21. // GetRelease returns the info of a release.
  22. func (a *Agent) GetRelease(
  23. name string,
  24. version int,
  25. ) (*release.Release, error) {
  26. // Namespace is already known by the RESTClientGetter.
  27. cmd := action.NewGet(a.ActionConfig)
  28. cmd.Version = version
  29. return cmd.Run(name)
  30. }
  31. // GetReleaseHistory returns a list of charts for a specific release
  32. func (a *Agent) GetReleaseHistory(
  33. name string,
  34. ) ([]*release.Release, error) {
  35. cmd := action.NewHistory(a.ActionConfig)
  36. return cmd.Run(name)
  37. }
  38. // UpgradeRelease upgrades a specific release with new values.yaml
  39. func (a *Agent) UpgradeRelease(
  40. name string,
  41. values string,
  42. ) (*release.Release, error) {
  43. // grab the latest release
  44. rel, err := a.GetRelease(name, 0)
  45. if err != nil {
  46. return nil, fmt.Errorf("Could not get release to be upgraded: %v", err)
  47. }
  48. ch := rel.Chart
  49. cmd := action.NewUpgrade(a.ActionConfig)
  50. valuesYaml, err := chartutil.ReadValues([]byte(values))
  51. if err != nil {
  52. return nil, fmt.Errorf("Values could not be parsed: %v", err)
  53. }
  54. res, err := cmd.Run(name, ch, valuesYaml)
  55. if err != nil {
  56. return nil, fmt.Errorf("Upgrade failed: %v", err)
  57. }
  58. return res, nil
  59. }
  60. // RollbackRelease rolls a release back to a specified revision/version
  61. func (a *Agent) RollbackRelease(
  62. name string,
  63. version int,
  64. ) error {
  65. cmd := action.NewRollback(a.ActionConfig)
  66. cmd.Version = version
  67. return cmd.Run(name)
  68. }