1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
16 "git.curoverse.com/arvados.git/sdk/go/arvados"
17 "git.curoverse.com/arvados.git/sdk/go/ctxlog"
18 "github.com/ghodss/yaml"
21 var DumpCommand dumpCommand
23 type dumpCommand struct{}
25 func (dumpCommand) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
29 fmt.Fprintf(stderr, "%s\n", err)
33 flags := flag.NewFlagSet("", flag.ContinueOnError)
34 flags.SetOutput(stderr)
35 configFile := flags.String("config", arvados.DefaultConfigFile, "Site configuration `file`")
36 err = flags.Parse(args)
37 if err == flag.ErrHelp {
40 } else if err != nil {
44 if len(flags.Args()) != 0 {
48 log := ctxlog.New(stderr, "text", "info")
49 cfg, err := loadFileOrStdin(*configFile, stdin, log)
53 out, err := yaml.Marshal(cfg)
57 _, err = stdout.Write(out)
64 var CheckCommand checkCommand
66 type checkCommand struct{}
68 func (checkCommand) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
72 fmt.Fprintf(stderr, "%s\n", err)
76 flags := flag.NewFlagSet("", flag.ContinueOnError)
77 flags.SetOutput(stderr)
78 configFile := flags.String("config", arvados.DefaultConfigFile, "Site configuration `file`")
79 err = flags.Parse(args)
80 if err == flag.ErrHelp {
83 } else if err != nil {
87 if len(flags.Args()) != 0 {
91 log := &plainLogger{w: stderr}
93 if *configFile == "-" {
94 buf, err = ioutil.ReadAll(stdin)
96 buf, err = ioutil.ReadFile(*configFile)
101 withoutDepr, err := load(bytes.NewBuffer(buf), log, false)
105 withDepr, err := load(bytes.NewBuffer(buf), nil, true)
109 cmd := exec.Command("diff", "-u", "--label", "without-deprecated-configs", "--label", "relying-on-deprecated-configs", "/dev/fd/3", "/dev/fd/4")
110 for _, obj := range []interface{}{withoutDepr, withDepr} {
111 y, _ := yaml.Marshal(obj)
112 pr, pw, err := os.Pipe()
118 io.Copy(pw, bytes.NewBuffer(y))
121 cmd.ExtraFiles = append(cmd.ExtraFiles, pr)
123 diff, err := cmd.CombinedOutput()
124 if bytes.HasPrefix(diff, []byte("--- ")) {
125 fmt.Fprintln(stdout, "Your configuration is relying on deprecated entries. Suggest making the following changes.")
128 } else if len(diff) > 0 {
129 fmt.Fprintf(stderr, "Unexpected diff output:\n%s", diff)
131 } else if err != nil {
140 type plainLogger struct {
145 func (pl *plainLogger) Warnf(format string, args ...interface{}) {
147 fmt.Fprintf(pl.w, format+"\n", args...)
150 var DumpDefaultsCommand defaultsCommand
152 type defaultsCommand struct{}
154 func (defaultsCommand) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
158 fmt.Fprintf(stderr, "%s\n", err)
162 _, err = stdout.Write(DefaultYAML)