[arvados] created: 2.6.0-537-g70f0fb817d
git repository hosting
git at public.arvados.org
Fri Aug 25 16:29:27 UTC 2023
at 70f0fb817d242a804a9e1647b526348742416b52 (commit)
commit 70f0fb817d242a804a9e1647b526348742416b52
Author: Tom Clegg <tom at curii.com>
Date: Fri Aug 25 12:28:56 2023 -0400
20757: `arvados-client shell` uses settings.conf if present.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom at curii.com>
diff --git a/cmd/arvados-client/container_gateway.go b/cmd/arvados-client/container_gateway.go
index 7b52cc3a64..2baa8012ea 100644
--- a/cmd/arvados-client/container_gateway.go
+++ b/cmd/arvados-client/container_gateway.go
@@ -66,8 +66,11 @@ func (lc *logsCommand) tail(crUUID string, stdout, stderr io.Writer, follow bool
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
- rpcconn := rpcFromEnv()
- err := lc.checkAPISupport(ctx, crUUID)
+ rpcconn, err := rpcFromEnv()
+ if err != nil {
+ return err
+ }
+ err = lc.checkAPISupport(ctx, crUUID)
if err != nil {
return err
}
@@ -401,12 +404,12 @@ Options:
loginUsername = targetUUID[:i]
targetUUID = targetUUID[i+1:]
}
- if os.Getenv("ARVADOS_API_HOST") == "" || os.Getenv("ARVADOS_API_TOKEN") == "" {
- fmt.Fprintln(stderr, "fatal: ARVADOS_API_HOST and ARVADOS_API_TOKEN environment variables are not set")
+ rpcconn, err := rpcFromEnv()
+ if err != nil {
+ fmt.Fprintln(stderr, err)
return 1
}
- rpcconn := rpcFromEnv()
- targetUUID, err := resolveToContainerUUID(rpcconn, targetUUID)
+ targetUUID, err = resolveToContainerUUID(rpcconn, targetUUID)
if err != nil {
fmt.Fprintln(stderr, err)
return 1
@@ -453,17 +456,20 @@ func shellescape(s string) string {
return "'" + strings.Replace(s, "'", "'\\''", -1) + "'"
}
-func rpcFromEnv() *rpc.Conn {
- insecure := os.Getenv("ARVADOS_API_HOST_INSECURE")
+func rpcFromEnv() (*rpc.Conn, error) {
+ ac := arvados.NewClientFromEnv()
+ if ac.APIHost == "" || ac.AuthToken == "" {
+ return nil, fmt.Errorf("fatal: ARVADOS_API_HOST and ARVADOS_API_TOKEN environment variables are not set, and ~/.config/arvados/settings.conf is not readable")
+ }
return rpc.NewConn("",
&url.URL{
Scheme: "https",
- Host: os.Getenv("ARVADOS_API_HOST"),
+ Host: ac.APIHost,
},
- insecure == "1" || insecure == "yes" || insecure == "true",
+ ac.Insecure,
func(context.Context) ([]string, error) {
- return []string{os.Getenv("ARVADOS_API_TOKEN")}, nil
- })
+ return []string{ac.AuthToken}, nil
+ }), nil
}
func resolveToContainerUUID(rpcconn *rpc.Conn, targetUUID string) (string, error) {
diff --git a/cmd/arvados-client/container_gateway_test.go b/cmd/arvados-client/container_gateway_test.go
index 761a7c3ef5..ec195569a6 100644
--- a/cmd/arvados-client/container_gateway_test.go
+++ b/cmd/arvados-client/container_gateway_test.go
@@ -49,6 +49,20 @@ func (s *ClientSuite) TestShellGateway(c *check.C) {
defer func() {
c.Check(arvados.NewClientFromEnv().RequestAndDecode(nil, "POST", "database/reset", nil, nil), check.IsNil)
}()
+ homedir := c.MkDir()
+ settings := "ARVADOS_API_HOST=" + os.Getenv("ARVADOS_API_HOST") + "\nARVADOS_API_TOKEN=" + arvadostest.ActiveTokenV2 + "\nARVADOS_API_HOST_INSECURE=true\n"
+ err := os.MkdirAll(homedir+"/.config/arvados", 0777)
+ c.Assert(err, check.IsNil)
+ err = os.WriteFile(homedir+"/.config/arvados/settings.conf", []byte(settings), 0777)
+ c.Assert(err, check.IsNil)
+
+ c.Logf("building arvados-client binary in %s", homedir)
+ cmd := exec.Command("go", "install", ".")
+ cmd.Env = append(os.Environ(), "GOBIN="+homedir)
+ cmd.Stdout = os.Stdout
+ cmd.Stderr = os.Stderr
+ c.Assert(cmd.Run(), check.IsNil)
+
uuid := arvadostest.QueuedContainerUUID
h := hmac.New(sha256.New, []byte(arvadostest.SystemRootToken))
fmt.Fprint(h, uuid)
@@ -63,7 +77,7 @@ func (s *ClientSuite) TestShellGateway(c *check.C) {
// container.
Target: crunchrun.GatewayTargetStub{},
}
- err := gw.Start()
+ err = gw.Start()
c.Assert(err, check.IsNil)
rpcconn := rpc.NewConn("",
@@ -85,8 +99,13 @@ func (s *ClientSuite) TestShellGateway(c *check.C) {
}})
c.Assert(err, check.IsNil)
+ c.Log("connecting using ARVADOS_* env vars")
var stdout, stderr bytes.Buffer
- cmd := exec.Command("go", "run", ".", "shell", uuid, "-o", "controlpath=none", "-o", "userknownhostsfile="+c.MkDir()+"/known_hosts", "echo", "ok")
+ cmd = exec.Command(
+ homedir+"/arvados-client", "shell", uuid,
+ "-o", "controlpath=none",
+ "-o", "userknownhostsfile="+homedir+"/known_hosts",
+ "echo", "ok")
cmd.Env = append(cmd.Env, os.Environ()...)
cmd.Env = append(cmd.Env, "ARVADOS_API_TOKEN="+arvadostest.ActiveTokenV2)
cmd.Stdout = &stdout
@@ -94,13 +113,16 @@ func (s *ClientSuite) TestShellGateway(c *check.C) {
stdin, err := cmd.StdinPipe()
c.Assert(err, check.IsNil)
go fmt.Fprintln(stdin, "data appears on stdin, but stdin does not close; cmd should exit anyway, not hang")
- time.AfterFunc(5*time.Second, func() {
+ timeout := time.AfterFunc(5*time.Second, func() {
c.Errorf("timed out -- remote end is probably hung waiting for us to close stdin")
stdin.Close()
})
+ c.Logf("cmd.Args: %s", cmd.Args)
c.Check(cmd.Run(), check.IsNil)
+ timeout.Stop()
c.Check(stdout.String(), check.Equals, "ok\n")
+ c.Logf("setting up an http server")
// Set up an http server, and try using "arvados-client shell"
// to forward traffic to it.
httpTarget := &httpserver.Server{}
@@ -120,22 +142,27 @@ func (s *ClientSuite) TestShellGateway(c *check.C) {
_, forwardedPort, _ := net.SplitHostPort(ln.Addr().String())
ln.Close()
+ c.Log("connecting using settings.conf file")
stdout.Reset()
stderr.Reset()
ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(10*time.Second))
defer cancel()
cmd = exec.CommandContext(ctx,
- "go", "run", ".", "shell", uuid,
+ homedir+"/arvados-client", "shell", uuid,
"-L", forwardedPort+":"+httpTarget.Addr,
"-o", "controlpath=none",
- "-o", "userknownhostsfile="+c.MkDir()+"/known_hosts",
+ "-o", "userknownhostsfile="+homedir+"/known_hosts",
"-N",
)
- c.Logf("cmd.Args: %s", cmd.Args)
- cmd.Env = append(cmd.Env, os.Environ()...)
- cmd.Env = append(cmd.Env, "ARVADOS_API_TOKEN="+arvadostest.ActiveTokenV2)
+ for _, kv := range os.Environ() {
+ if !strings.HasPrefix(kv, "ARVADOS_") && !strings.HasPrefix(kv, "HOME=") {
+ cmd.Env = append(cmd.Env, kv)
+ }
+ }
+ cmd.Env = append(cmd.Env, "HOME="+homedir)
cmd.Stdout = &stdout
cmd.Stderr = &stderr
+ c.Logf("cmd.Args: %s", cmd.Args)
cmd.Start()
forwardedURL := fmt.Sprintf("http://localhost:%s/foo", forwardedPort)
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list