1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
16 "git.curoverse.com/arvados.git/lib/cmd"
17 "git.curoverse.com/arvados.git/sdk/go/arvados"
18 "git.curoverse.com/arvados.git/sdk/go/ctxlog"
19 "github.com/ghodss/yaml"
22 var DumpCommand cmd.Handler = dumpCommand{}
24 type dumpCommand struct{}
26 func (dumpCommand) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
30 fmt.Fprintf(stderr, "%s\n", err)
34 flags := flag.NewFlagSet("", flag.ContinueOnError)
35 flags.SetOutput(stderr)
36 configFile := flags.String("config", arvados.DefaultConfigFile, "Site configuration `file`")
37 err = flags.Parse(args)
38 if err == flag.ErrHelp {
41 } else if err != nil {
45 if len(flags.Args()) != 0 {
49 log := ctxlog.New(stderr, "text", "info")
50 cfg, err := loadFileOrStdin(*configFile, stdin, log)
54 out, err := yaml.Marshal(cfg)
58 _, err = stdout.Write(out)
65 var CheckCommand cmd.Handler = checkCommand{}
67 type checkCommand struct{}
69 func (checkCommand) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
73 fmt.Fprintf(stderr, "%s\n", err)
77 flags := flag.NewFlagSet("", flag.ContinueOnError)
78 flags.SetOutput(stderr)
79 configFile := flags.String("config", arvados.DefaultConfigFile, "Site configuration `file`")
80 err = flags.Parse(args)
81 if err == flag.ErrHelp {
84 } else if err != nil {
88 if len(flags.Args()) != 0 {
92 log := &plainLogger{w: stderr}
94 if *configFile == "-" {
95 buf, err = ioutil.ReadAll(stdin)
97 buf, err = ioutil.ReadFile(*configFile)
102 withoutDepr, err := load(bytes.NewBuffer(buf), log, false)
106 withDepr, err := load(bytes.NewBuffer(buf), nil, true)
110 cmd := exec.Command("diff", "-u", "--label", "without-deprecated-configs", "--label", "relying-on-deprecated-configs", "/dev/fd/3", "/dev/fd/4")
111 for _, obj := range []interface{}{withoutDepr, withDepr} {
112 y, _ := yaml.Marshal(obj)
113 pr, pw, err := os.Pipe()
119 io.Copy(pw, bytes.NewBuffer(y))
122 cmd.ExtraFiles = append(cmd.ExtraFiles, pr)
124 diff, err := cmd.CombinedOutput()
125 if bytes.HasPrefix(diff, []byte("--- ")) {
126 fmt.Fprintln(stdout, "Your configuration is relying on deprecated entries. Suggest making the following changes.")
129 } else if len(diff) > 0 {
130 fmt.Fprintf(stderr, "Unexpected diff output:\n%s", diff)
132 } else if err != nil {
141 type plainLogger struct {
146 func (pl *plainLogger) Warnf(format string, args ...interface{}) {
148 fmt.Fprintf(pl.w, format+"\n", args...)