Merge branch '15000-config-api'
authorTom Clegg <tclegg@veritasgenetics.com>
Fri, 14 Jun 2019 18:28:49 +0000 (14:28 -0400)
committerTom Clegg <tclegg@veritasgenetics.com>
Fri, 14 Jun 2019 18:28:49 +0000 (14:28 -0400)
refs #15000

Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>

1  2 
lib/config/cmd.go
lib/config/cmd_test.go

diff --combined lib/config/cmd.go
index 858bfc2b26a7e6deb90142c0f7d5904e18ef1474,39df4ec170c4ef13f89ef778b43eb67a1e1e675c..a41e4b0331548f977d69b3ce993795c51e28ea1d
@@@ -6,20 -6,17 +6,19 @@@ package confi
  
  import (
        "bytes"
 +      "flag"
        "fmt"
        "io"
        "io/ioutil"
        "os"
        "os/exec"
  
-       "git.curoverse.com/arvados.git/lib/cmd"
 +      "git.curoverse.com/arvados.git/sdk/go/arvados"
        "git.curoverse.com/arvados.git/sdk/go/ctxlog"
        "github.com/ghodss/yaml"
  )
  
- var DumpCommand cmd.Handler = dumpCommand{}
+ var DumpCommand dumpCommand
  
  type dumpCommand struct{}
  
@@@ -30,24 -27,12 +29,24 @@@ func (dumpCommand) RunCommand(prog stri
                        fmt.Fprintf(stderr, "%s\n", err)
                }
        }()
 -      if len(args) != 0 {
 -              err = fmt.Errorf("usage: %s <config-src.yaml >config-min.yaml", prog)
 +
 +      flags := flag.NewFlagSet("", flag.ContinueOnError)
 +      flags.SetOutput(stderr)
 +      configFile := flags.String("config", arvados.DefaultConfigFile, "Site configuration `file`")
 +      err = flags.Parse(args)
 +      if err == flag.ErrHelp {
 +              err = nil
 +              return 0
 +      } else if err != nil {
 +              return 2
 +      }
 +
 +      if len(flags.Args()) != 0 {
 +              flags.Usage()
                return 2
        }
        log := ctxlog.New(stderr, "text", "info")
 -      cfg, err := Load(stdin, log)
 +      cfg, err := loadFileOrStdin(*configFile, stdin, log)
        if err != nil {
                return 1
        }
@@@ -62,7 -47,7 +61,7 @@@
        return 0
  }
  
- var CheckCommand cmd.Handler = checkCommand{}
+ var CheckCommand checkCommand
  
  type checkCommand struct{}
  
@@@ -73,29 -58,12 +72,29 @@@ func (checkCommand) RunCommand(prog str
                        fmt.Fprintf(stderr, "%s\n", err)
                }
        }()
 -      if len(args) != 0 {
 -              err = fmt.Errorf("usage: %s <config-src.yaml && echo 'no changes needed'", prog)
 +
 +      flags := flag.NewFlagSet("", flag.ContinueOnError)
 +      flags.SetOutput(stderr)
 +      configFile := flags.String("config", arvados.DefaultConfigFile, "Site configuration `file`")
 +      err = flags.Parse(args)
 +      if err == flag.ErrHelp {
 +              err = nil
 +              return 0
 +      } else if err != nil {
 +              return 2
 +      }
 +
 +      if len(flags.Args()) != 0 {
 +              flags.Usage()
                return 2
        }
        log := &plainLogger{w: stderr}
 -      buf, err := ioutil.ReadAll(stdin)
 +      var buf []byte
 +      if *configFile == "-" {
 +              buf, err = ioutil.ReadAll(stdin)
 +      } else {
 +              buf, err = ioutil.ReadFile(*configFile)
 +      }
        if err != nil {
                return 1
        }
diff --combined lib/config/cmd_test.go
index d77003b478112e6ee3960e65541bb9fe1dc0a083,fdcb6cc7673dce492e7abbb5fa6873e339e7b3f5..f2915a03917260aa07fd5c656b5a1b9c7833757f
@@@ -7,23 -7,30 +7,30 @@@ package confi
  import (
        "bytes"
  
+       "git.curoverse.com/arvados.git/lib/cmd"
        check "gopkg.in/check.v1"
  )
  
  var _ = check.Suite(&CommandSuite{})
  
+ var (
+       // Commands must satisfy cmd.Handler interface
+       _ cmd.Handler = dumpCommand{}
+       _ cmd.Handler = checkCommand{}
+ )
  type CommandSuite struct{}
  
  func (s *CommandSuite) TestBadArg(c *check.C) {
        var stderr bytes.Buffer
        code := DumpCommand.RunCommand("arvados config-dump", []string{"-badarg"}, bytes.NewBuffer(nil), bytes.NewBuffer(nil), &stderr)
        c.Check(code, check.Equals, 2)
 -      c.Check(stderr.String(), check.Matches, `(?ms)usage: .*`)
 +      c.Check(stderr.String(), check.Matches, `(?ms)flag provided but not defined: -badarg\nUsage:\n.*`)
  }
  
  func (s *CommandSuite) TestEmptyInput(c *check.C) {
        var stdout, stderr bytes.Buffer
 -      code := DumpCommand.RunCommand("arvados config-dump", nil, &bytes.Buffer{}, &stdout, &stderr)
 +      code := DumpCommand.RunCommand("arvados config-dump", []string{"-config", "-"}, &bytes.Buffer{}, &stdout, &stderr)
        c.Check(code, check.Equals, 1)
        c.Check(stderr.String(), check.Matches, `config does not define any clusters\n`)
  }
@@@ -36,7 -43,7 +43,7 @@@ Clusters
    API:
      MaxItemsPerResponse: 1234
  `
 -      code := CheckCommand.RunCommand("arvados config-check", nil, bytes.NewBufferString(in), &stdout, &stderr)
 +      code := CheckCommand.RunCommand("arvados config-check", []string{"-config", "-"}, bytes.NewBufferString(in), &stdout, &stderr)
        c.Check(code, check.Equals, 0)
        c.Check(stdout.String(), check.Equals, "")
        c.Check(stderr.String(), check.Equals, "")
@@@ -50,9 -57,9 +57,9 @@@ Clusters
    RequestLimits:
      MaxItemsPerResponse: 1234
  `
 -      code := CheckCommand.RunCommand("arvados config-check", nil, bytes.NewBufferString(in), &stdout, &stderr)
 +      code := CheckCommand.RunCommand("arvados config-check", []string{"-config", "-"}, bytes.NewBufferString(in), &stdout, &stderr)
        c.Check(code, check.Equals, 1)
-       c.Check(stdout.String(), check.Matches, `(?ms).*API:\n\- +.*MaxItemsPerResponse: 1000\n\+ +MaxItemsPerResponse: 1234\n.*`)
+       c.Check(stdout.String(), check.Matches, `(?ms).*\n\- +.*MaxItemsPerResponse: 1000\n\+ +MaxItemsPerResponse: 1234\n.*`)
  }
  
  func (s *CommandSuite) TestCheckUnknownKey(c *check.C) {
@@@ -70,7 -77,7 +77,7 @@@ Clusters
      ConnectionPool:
        {Bogus5: true}
  `
 -      code := CheckCommand.RunCommand("arvados config-check", nil, bytes.NewBufferString(in), &stdout, &stderr)
 +      code := CheckCommand.RunCommand("arvados config-check", []string{"-config", "-"}, bytes.NewBufferString(in), &stdout, &stderr)
        c.Log(stderr.String())
        c.Check(code, check.Equals, 1)
        c.Check(stderr.String(), check.Matches, `(?ms).*deprecated or unknown config entry: Clusters.z1234.Bogus1\n.*`)
@@@ -92,7 -99,7 +99,7 @@@ Clusters
      InternalURLs:
       http://localhost:12345: {}
  `
 -      code := DumpCommand.RunCommand("arvados config-dump", nil, bytes.NewBufferString(in), &stdout, &stderr)
 +      code := DumpCommand.RunCommand("arvados config-dump", []string{"-config", "-"}, bytes.NewBufferString(in), &stdout, &stderr)
        c.Check(code, check.Equals, 0)
        c.Check(stdout.String(), check.Matches, `(?ms).*TimeoutBooting: 10m\n.*`)
        c.Check(stdout.String(), check.Matches, `(?ms).*http://localhost:12345: {}\n.*`)
@@@ -106,7 -113,7 +113,7 @@@ Clusters
    UnknownKey: foobar
    ManagementToken: secret
  `
 -      code := DumpCommand.RunCommand("arvados config-dump", nil, bytes.NewBufferString(in), &stdout, &stderr)
 +      code := DumpCommand.RunCommand("arvados config-dump", []string{"-config", "-"}, bytes.NewBufferString(in), &stdout, &stderr)
        c.Check(code, check.Equals, 0)
        c.Check(stderr.String(), check.Matches, `(?ms).*deprecated or unknown config entry: Clusters.z1234.UnknownKey.*`)
        c.Check(stdout.String(), check.Matches, `(?ms)Clusters:\n  z1234:\n.*`)