From: Tom Clegg Date: Mon, 11 Jul 2022 18:33:45 +0000 (-0400) Subject: 17344: 'arvados-client root cmd...' uses root token from config. X-Git-Tag: 2.5.0~115^2~21 X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/6e004a4169a781ef9e288bd94f585a5eb3ca942c 17344: 'arvados-client root cmd...' uses root token from config. Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- diff --git a/cmd/arvados-client/cmd.go b/cmd/arvados-client/cmd.go index cb15462119..783fb0ca90 100644 --- a/cmd/arvados-client/cmd.go +++ b/cmd/arvados-client/cmd.go @@ -61,6 +61,7 @@ var ( "shell": shellCommand{}, "connect-ssh": connectSSHCommand{}, "diagnostics": diagnostics.Command{}, + "root": rootCommand{}, }) ) diff --git a/cmd/arvados-client/root.go b/cmd/arvados-client/root.go new file mode 100644 index 0000000000..5d9845ce4e --- /dev/null +++ b/cmd/arvados-client/root.go @@ -0,0 +1,48 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: Apache-2.0 + +package main + +import ( + "flag" + "fmt" + "io" + "os" + + "git.arvados.org/arvados.git/lib/cmd" + "git.arvados.org/arvados.git/lib/config" + "git.arvados.org/arvados.git/sdk/go/ctxlog" +) + +// rootCommand runs another command using API connection info and +// SystemRootToken from the system config file instead of the caller's +// environment vars. +type rootCommand struct{} + +func (rootCommand) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int { + ldr := config.NewLoader(stdin, ctxlog.New(stderr, "text", "info")) + flags := flag.NewFlagSet(prog, flag.ContinueOnError) + ldr.SetupFlags(flags) + if ok, code := cmd.ParseFlags(flags, prog, args, "subcommand ...", stderr); !ok { + return code + } + cfg, err := ldr.Load() + if err != nil { + fmt.Fprintln(stderr, err) + return 1 + } + cluster, err := cfg.GetCluster("") + if err != nil { + fmt.Fprintln(stderr, err) + return 1 + } + os.Setenv("ARVADOS_API_HOST", cluster.Services.Controller.ExternalURL.Host) + os.Setenv("ARVADOS_API_TOKEN", cluster.SystemRootToken) + if cluster.TLS.Insecure { + os.Setenv("ARVADOS_API_HOST_INSECURE", "1") + } else { + os.Unsetenv("ARVADOS_API_HOST_INSECURE") + } + return handler.RunCommand(prog, flags.Args(), stdin, stdout, stderr) +}