feat(): initial json output functionality

pull/6096/head^2
Art Begolli 6 years ago
parent e70f012bb6
commit e0e6a7acb6

@ -17,6 +17,7 @@ limitations under the License.
package main
import (
"encoding/json"
"fmt"
"io"
"strings"
@ -48,6 +49,14 @@ type searchCmd struct {
regexp bool
version string
colWidth uint
output string
}
type ResultEntry struct {
Name string `json:"name"`
ChartVersion string `json:"chartVersion"`
AppVersion string `json:"appVersion"`
Description string `json:"description"`
}
func newSearchCmd(out io.Writer) *cobra.Command {
@ -68,6 +77,7 @@ func newSearchCmd(out io.Writer) *cobra.Command {
f.BoolVarP(&sc.versions, "versions", "l", false, "Show the long listing, with each version of each chart on its own line")
f.StringVarP(&sc.version, "version", "v", "", "Search using semantic versioning constraints")
f.UintVar(&sc.colWidth, "col-width", 60, "Specifies the max column width of output")
f.StringVarP(&sc.output, "output", "o", "", "Show the output in specified format")
return cmd
}
@ -95,6 +105,12 @@ func (s *searchCmd) run(args []string) error {
return err
}
if s.output == "json" {
formattedResults, _ := s.formatSearchResultsJson(data, s.colWidth)
fmt.Fprintln(s.out, formattedResults)
return nil
}
fmt.Fprintln(s.out, s.formatSearchResults(data, s.colWidth))
return nil
@ -141,6 +157,28 @@ func (s *searchCmd) formatSearchResults(res []*search.Result, colWidth uint) str
return table.String()
}
func (s *searchCmd) formatSearchResultsJson(res []*search.Result, colWidth uint) (string, error) {
if len(res) == 0 {
return "No results found", nil
}
resultJson := []ResultEntry{}
for _, r := range res {
resultRow := ResultEntry{
Name: r.Name,
ChartVersion: r.Chart.Version,
AppVersion: r.Chart.AppVersion,
Description: r.Chart.Description,
}
resultJson = append(resultJson, resultRow)
}
json, err := json.MarshalIndent(resultJson, "", " ")
if err != nil {
return "", err
}
return string(json), nil
}
func (s *searchCmd) buildIndex() (*search.Index, error) {
// Load the repositories.yaml
rf, err := repo.LoadRepositoriesFile(s.helmhome.RepositoryFile())

Loading…
Cancel
Save