reader.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package helm
  2. import (
  3. "fmt"
  4. "github.com/porter-dev/porter/internal/templater"
  5. "github.com/porter-dev/porter/internal/templater/utils"
  6. "github.com/stefanmcshane/helm/pkg/chart"
  7. "github.com/stefanmcshane/helm/pkg/release"
  8. )
  9. // TemplateReader implements the templater.TemplateReader for reading from
  10. // the Helm values.
  11. //
  12. // Note: ReadStream does nothing at the moment.
  13. type TemplateReader struct {
  14. Queries []*templater.TemplateReaderQuery
  15. Release *release.Release
  16. Chart *chart.Chart
  17. }
  18. // ValuesFromTarget returns a set of values by reading from a Helm release if set, otherwise
  19. // a helm chart.
  20. func (r *TemplateReader) ValuesFromTarget() (map[string]interface{}, error) {
  21. // if release exists, read values from release
  22. if r.Release != nil {
  23. // merge config values with overriding values
  24. return utils.CoalesceValues(r.Release.Chart.Values, r.Release.Config), nil
  25. } else if r.Chart != nil {
  26. return r.Chart.Values, nil
  27. }
  28. // otherwise, return the chart values
  29. return nil, fmt.Errorf("must set release or chart to read values")
  30. }
  31. // RegisterQuery adds a new query to be executed against the values
  32. func (r *TemplateReader) RegisterQuery(query *templater.TemplateReaderQuery) error {
  33. r.Queries = append(r.Queries, query)
  34. return nil
  35. }
  36. // Read executes a set of queries against the helm values in the release/chart
  37. func (r *TemplateReader) Read() (map[string]interface{}, error) {
  38. values, err := r.ValuesFromTarget()
  39. if err != nil {
  40. return nil, err
  41. }
  42. return utils.QueryValues(values, r.Queries)
  43. }
  44. // ReadStream is unimplemented: stub just to implement TemplateReader
  45. func (r *TemplateReader) ReadStream(
  46. on templater.OnDataStream,
  47. stopCh <-chan struct{},
  48. ) error {
  49. return nil
  50. }