mirror of https://github.com/grafana/grafana.git
				
				
				
			Add basic resource trimming command (#41780)
* Add basic trim command * Indent properly * Actually apply defaults if the user asks for it
This commit is contained in:
		
							parent
							
								
									c82a15eafb
								
							
						
					
					
						commit
						fc3ed34b22
					
				|  | @ -214,6 +214,22 @@ so must be recompiled to validate newly-added CUE files.`, | |||
| 			}, | ||||
| 		}, | ||||
| 	}, | ||||
| 	{ | ||||
| 		Name:   "trim-resource", | ||||
| 		Usage:  "trim schema-specified defaults from a resource", | ||||
| 		Action: runCueCommand(cmd.trimResource), | ||||
| 		Flags: []cli.Flag{ | ||||
| 			&cli.StringFlag{ | ||||
| 				Name:  "dashboard", | ||||
| 				Usage: "path to file containing (valid) dashboard JSON", | ||||
| 			}, | ||||
| 			&cli.BoolFlag{ | ||||
| 				Name:  "apply", | ||||
| 				Usage: "invert the operation: apply defaults instead of trimming them", | ||||
| 				Value: false, | ||||
| 			}, | ||||
| 		}, | ||||
| 	}, | ||||
| 	{ | ||||
| 		Name:  "gen-ts", | ||||
| 		Usage: "generate TypeScript from all known CUE file types", | ||||
|  |  | |||
|  | @ -0,0 +1,59 @@ | |||
| package commands | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	gerrors "errors" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 
 | ||||
| 	"cuelang.org/go/cue/errors" | ||||
| 	"github.com/grafana/grafana/pkg/cmd/grafana-cli/utils" | ||||
| 	"github.com/grafana/grafana/pkg/schema" | ||||
| 	"github.com/grafana/grafana/pkg/schema/load" | ||||
| ) | ||||
| 
 | ||||
| func (cmd Command) trimResource(c utils.CommandLine) error { | ||||
| 	filename := c.String("dashboard") | ||||
| 	if filename == "" { | ||||
| 		return gerrors.New("must specify dashboard file path with --dashboard") | ||||
| 	} | ||||
| 	apply := c.Bool("apply") | ||||
| 
 | ||||
| 	f, err := os.Open(filepath.Clean(filename)) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	b, err := io.ReadAll(f) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	res := schema.Resource{Value: string(b), Name: filename} | ||||
| 	sch, err := load.DistDashboardFamily(paths) | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("error while loading dashboard scuemata, err: %w", err) | ||||
| 	} | ||||
| 
 | ||||
| 	var out schema.Resource | ||||
| 	if apply { | ||||
| 		out, err = schema.ApplyDefaults(res, sch.CUE()) | ||||
| 	} else { | ||||
| 		out, err = schema.TrimDefaults(res, sch.CUE()) | ||||
| 	} | ||||
| 
 | ||||
| 	if err != nil { | ||||
| 		return gerrors.New(errors.Details(err, nil)) | ||||
| 	} | ||||
| 
 | ||||
| 	b = []byte(out.Value.(string)) | ||||
| 	var buf bytes.Buffer | ||||
| 	err = json.Indent(&buf, b, "", "  ") | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	fmt.Println(buf.String()) | ||||
| 	return nil | ||||
| } | ||||
		Loading…
	
		Reference in New Issue