17170: "arvados-client shell" accepts container request UUID.
authorTom Clegg <tom@curii.com>
Wed, 13 Jan 2021 22:18:08 +0000 (17:18 -0500)
committerTom Clegg <tom@curii.com>
Wed, 13 Jan 2021 22:18:08 +0000 (17:18 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

cmd/arvados-client/container_gateway.go
lib/controller/rpc/conn.go
sdk/go/arvados/api.go

index b5fde6cf15bf6d9bc806ebfcc7a212bb9164465b..1ed6dc2791aea8a5de2cec80348e4f8c5095b01f 100644 (file)
@@ -125,18 +125,24 @@ Options:
                func(context.Context) ([]string, error) {
                        return []string{os.Getenv("ARVADOS_API_TOKEN")}, nil
                })
-       // if strings.Contains(targetUUID, "-xvhdp-") {
-       //      cr, err := rpcconn.ContainerRequestGet(context.TODO(), arvados.GetOptions{UUID: targetUUID})
-       //      if err != nil {
-       //              fmt.Fprintln(stderr, err)
-       //              return 1
-       //      }
-       //      if cr.ContainerUUID == "" {
-       //              fmt.Fprintf(stderr, "no container assigned, container request state is %s\n", strings.ToLower(cr.State))
-       //              return 1
-       //      }
-       //      targetUUID = cr.ContainerUUID
-       // }
+       if strings.Contains(targetUUID, "-xvhdp-") {
+               crs, err := rpcconn.ContainerRequestList(context.TODO(), arvados.ListOptions{Limit: -1, Filters: []arvados.Filter{{"uuid", "=", targetUUID}}})
+               if err != nil {
+                       fmt.Fprintln(stderr, err)
+                       return 1
+               }
+               if len(crs.Items) < 1 {
+                       fmt.Fprintf(stderr, "container request %q not found\n", targetUUID)
+                       return 1
+               }
+               cr := crs.Items[0]
+               if cr.ContainerUUID == "" {
+                       fmt.Fprintf(stderr, "no container assigned, container request state is %s\n", strings.ToLower(string(cr.State)))
+                       return 1
+               }
+               targetUUID = cr.ContainerUUID
+               fmt.Fprintln(stderr, "connecting to container", targetUUID)
+       }
        sshconn, err := rpcconn.ContainerSSH(context.TODO(), arvados.ContainerSSHOptions{
                UUID:          targetUUID,
                DetachKeys:    *detachKeys,
index a9a638759e623ee04a9cb362259f77bb6899afc6..5fecf662f4bef7b1a685987834bea31d98b71e61 100644 (file)
@@ -361,6 +361,13 @@ func (conn *Conn) ContainerSSH(ctx context.Context, options arvados.ContainerSSH
        return
 }
 
+func (conn *Conn) ContainerRequestList(ctx context.Context, options arvados.ListOptions) (arvados.ContainerRequestList, error) {
+       ep := arvados.EndpointContainerRequestList
+       var resp arvados.ContainerRequestList
+       err := conn.requestAndDecode(ctx, &resp, ep, nil, options)
+       return resp, err
+}
+
 func (conn *Conn) SpecimenCreate(ctx context.Context, options arvados.CreateOptions) (arvados.Specimen, error) {
        ep := arvados.EndpointSpecimenCreate
        var resp arvados.Specimen
index e8baa01b40619c57f36c64748d7525e92f075922..4675906e74c07f4b6ebad04f2ae01367a55fcd25 100644 (file)
@@ -46,6 +46,7 @@ var (
        EndpointContainerLock                 = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/lock", ""}
        EndpointContainerUnlock               = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/unlock", ""}
        EndpointContainerSSH                  = APIEndpoint{"GET", "arvados/v1/connect/{uuid}/ssh", ""} // move to /containers after #17014 fixes routing
+       EndpointContainerRequestList          = APIEndpoint{"GET", "arvados/v1/container_requests", ""}
        EndpointUserActivate                  = APIEndpoint{"POST", "arvados/v1/users/{uuid}/activate", ""}
        EndpointUserCreate                    = APIEndpoint{"POST", "arvados/v1/users", "user"}
        EndpointUserCurrent                   = APIEndpoint{"GET", "arvados/v1/users/current", ""}