12876: arvados-client get [-format=yaml] uuid
[arvados.git] / lib / cli / get.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: Apache-2.0
4
5 package cli
6
7 import (
8         "encoding/json"
9         "flag"
10         "fmt"
11         "io"
12
13         "git.curoverse.com/arvados.git/sdk/go/arvados"
14         "github.com/ghodss/yaml"
15 )
16
17 func Get(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
18         var err error
19         defer func() {
20                 if err != nil {
21                         fmt.Fprintf(stderr, "%s\n", err)
22                 }
23         }()
24
25         flags := flag.NewFlagSet(prog, flag.ContinueOnError)
26         format := flags.String("format", "json", "output format (json or yaml)")
27         err = flags.Parse(args)
28         if err != nil {
29                 return 2
30         }
31         if len(flags.Args()) != 1 {
32                 flags.Usage()
33                 return 2
34         }
35
36         id := flags.Args()[0]
37         client := arvados.NewClientFromEnv()
38         path, err := client.PathForUUID("show", id)
39         if err != nil {
40                 return 1
41         }
42
43         var obj map[string]interface{}
44         err = client.RequestAndDecode(&obj, "GET", path, nil, nil)
45         if err != nil {
46                 err = fmt.Errorf("GET %s: %s", path, err)
47                 return 1
48         }
49         if *format == "yaml" {
50                 var buf []byte
51                 buf, err = yaml.Marshal(obj)
52                 if err == nil {
53                         _, err = stdout.Write(buf)
54                 }
55         } else {
56                 enc := json.NewEncoder(stdout)
57                 enc.SetIndent("", "  ")
58                 err = enc.Encode(obj)
59         }
60         if err != nil {
61                 err = fmt.Errorf("encoding: %s", err)
62                 return 1
63         }
64         return 0
65 }