Add -u short option for --url and support port number only.
[src/xds/xds-cli.git] / cmd-sdks.go
1 package main
2
3 import (
4         "fmt"
5         "strconv"
6
7         "github.com/iotbzh/xds-agent/lib/xaapiv1"
8         "github.com/urfave/cli"
9 )
10
11 func initCmdSdks(cmdDef *[]cli.Command) {
12         *cmdDef = append(*cmdDef, cli.Command{
13                 Name:     "sdks",
14                 Aliases:  []string{"sdk"},
15                 HideHelp: true,
16                 Usage:    "SDKs commands group",
17                 Subcommands: []cli.Command{
18                         {
19                                 Name:    "add",
20                                 Aliases: []string{"a"},
21                                 Usage:   "Add a new SDK",
22                                 Action:  sdksAdd,
23                         },
24                         {
25                                 Name:   "get",
26                                 Usage:  "Get a property of a SDK",
27                                 Action: sdksGet,
28                                 Flags: []cli.Flag{
29                                         cli.StringFlag{
30                                                 Name:  "id",
31                                                 Usage: "sdk id",
32                                         },
33                                 },
34                         },
35                         {
36                                 Name:    "list",
37                                 Aliases: []string{"ls"},
38                                 Usage:   "List installed SDKs",
39                                 Action:  sdksList,
40                                 Flags: []cli.Flag{
41                                         cli.BoolFlag{
42                                                 Name:  "verbose, v",
43                                                 Usage: "display verbose output",
44                                         },
45                                 },
46                         },
47                         {
48                                 Name:    "remove",
49                                 Aliases: []string{"rm"},
50                                 Usage:   "Remove an existing SDK",
51                                 Action:  sdksRemove,
52                                 Flags: []cli.Flag{
53                                         cli.StringFlag{
54                                                 Name:  "id",
55                                                 Usage: "sdk id",
56                                         },
57                                 },
58                         },
59                 },
60         })
61 }
62
63 func sdksList(ctx *cli.Context) error {
64         // Get SDKs list
65         sdks := []xaapiv1.SDK{}
66         if err := sdksListGet(&sdks); err != nil {
67                 return cli.NewExitError(err.Error(), 1)
68         }
69         _displaySdks(sdks, ctx.Bool("verbose"))
70         return nil
71 }
72
73 func sdksGet(ctx *cli.Context) error {
74         id := GetID(ctx)
75         if id == "" {
76                 return cli.NewExitError("id parameter or option must be set", 1)
77         }
78         sdks := xaapiv1.SDK{}
79         url := "servers/" + strconv.Itoa(XdsServerIndexGet()) + "/sdks/" + id
80         if err := HTTPCli.Get(url, &sdks); err != nil {
81                 return cli.NewExitError(err.Error(), 1)
82         }
83         _displaySdks([]xaapiv1.SDK{sdks}, true)
84         return nil
85 }
86
87 func _displaySdks(sdks []xaapiv1.SDK, verbose bool) {
88         // Display result
89         first := true
90         writer := NewTableWriter()
91         for _, s := range sdks {
92                 if verbose {
93                         if !first {
94                                 fmt.Fprintln(writer)
95                         }
96                         fmt.Fprintln(writer, "ID\t"+s.ID)
97                         fmt.Fprintln(writer, "Name\t"+s.Name)
98                         fmt.Fprintln(writer, "Profile\t"+s.Profile)
99                         fmt.Fprintln(writer, "Arch\t"+s.Arch)
100                         fmt.Fprintln(writer, "Version\t"+s.Version)
101                         fmt.Fprintln(writer, "Path\t"+s.Path)
102
103                 } else {
104                         if first {
105                                 fmt.Fprintf(writer, "List of installed SDKs: \n")
106                                 fmt.Fprintf(writer, "  ID\tNAME\n")
107                         }
108                         fmt.Fprintf(writer, "  %s\t%s\n", s.ID, s.Name)
109                 }
110                 first = false
111         }
112         writer.Flush()
113 }
114
115 func sdksListGet(sdks *[]xaapiv1.SDK) error {
116         url := "servers/" + strconv.Itoa(XdsServerIndexGet()) + "/sdks"
117         if err := HTTPCli.Get(url, &sdks); err != nil {
118                 return err
119         }
120         Log.Debugf("Result of %s: %v", url, sdks)
121
122         return nil
123 }
124
125 func sdksAdd(ctx *cli.Context) error {
126         return fmt.Errorf("not supported yet")
127 }
128
129 func sdksRemove(ctx *cli.Context) error {
130         id := GetID(ctx)
131         if id == "" {
132                 return cli.NewExitError("id parameter or option must be set", 1)
133         }
134
135         return fmt.Errorf("not supported yet")
136 }