Skip to content
This repository was archived by the owner on Aug 30, 2024. It is now read-only.

Commit 7bf459b

Browse files
committed
Improve url command
1 parent 9b1173e commit 7bf459b

File tree

1 file changed

+29
-25
lines changed

1 file changed

+29
-25
lines changed

cmd/coder/urls.go

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import (
88
"regexp"
99
"strconv"
1010
"strings"
11-
"text/tabwriter"
1211

12+
"cdr.dev/coder-cli/internal/x/xtabwriter"
1313
"github.com/urfave/cli"
1414
"golang.org/x/xerrors"
1515

@@ -19,20 +19,22 @@ import (
1919
func makeURLCmd() cli.Command {
2020
var outputFmt string
2121
return cli.Command{
22-
Name: "urls",
23-
Usage: "Interact with environment DevURLs",
24-
ArgsUsage: "",
25-
Before: nil,
26-
After: nil,
27-
OnUsageError: nil,
22+
Name: "urls",
23+
Usage: "Interact with environment DevURLs",
24+
Action: exitHelp,
2825
Subcommands: []cli.Command{
2926
makeCreateDevURL(),
3027
{
3128
Name: "ls",
3229
Usage: "List all DevURLs for an environment",
3330
ArgsUsage: "[env_name]",
34-
Before: nil,
35-
Action: makeListDevURLs(&outputFmt),
31+
Before: func(c *cli.Context) error {
32+
if !(outputFmt == "json" || outputFmt == "human") {
33+
return xerrors.Errorf("unknown --output value %q")
34+
}
35+
return nil
36+
},
37+
Action: makeListDevURLs(&outputFmt),
3638
Flags: []cli.Flag{
3739
cli.StringFlag{
3840
Name: "output",
@@ -45,22 +47,30 @@ func makeURLCmd() cli.Command {
4547
{
4648
Name: "rm",
4749
Usage: "Remove a dev url",
48-
ArgsUsage: "",
49-
Before: nil,
50-
Action: removeDevURL,
51-
Flags: nil,
50+
ArgsUsage: "[env_name] [port]",
51+
Before: func(c *cli.Context) error {
52+
var (
53+
envName = c.Args().First()
54+
port = c.Args().Get(1)
55+
)
56+
if envName == "" || port == "" {
57+
return xerrors.Errorf("[env_name] and [port] are required arguments")
58+
}
59+
return nil
60+
},
61+
Action: removeDevURL,
5262
},
5363
},
5464
}
5565
}
5666

5767
// DevURL is the parsed json response record for a devURL from cemanager
5868
type DevURL struct {
59-
ID string `json:"id"`
69+
ID string `json:"id" tab:"-"`
6070
URL string `json:"url"`
6171
Port int `json:"port"`
72+
Name string `json:"name" tab:"-"`
6273
Access string `json:"access"`
63-
Name string `json:"name"`
6474
}
6575

6676
var urlAccessLevel = map[string]string{
@@ -101,18 +111,12 @@ func makeListDevURLs(outputFmt *string) func(c *cli.Context) {
101111
envName := c.Args().First()
102112
devURLs := urlList(envName)
103113

104-
if len(devURLs) == 0 {
105-
return
106-
}
107-
108114
switch *outputFmt {
109115
case "human":
110-
w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', tabwriter.TabIndent)
111-
for _, devURL := range devURLs {
112-
fmt.Fprintf(w, "%s\t%d\t%s\n", devURL.URL, devURL.Port, devURL.Access)
113-
}
114-
err := w.Flush()
115-
requireSuccess(err, "failed to flush writer: %v", err)
116+
err := xtabwriter.WriteTable(len(devURLs), func(i int) interface{} {
117+
return devURLs[i]
118+
})
119+
requireSuccess(err, "failed to write table: %v", err)
116120
case "json":
117121
err := json.NewEncoder(os.Stdout).Encode(devURLs)
118122
requireSuccess(err, "failed to encode devurls to json: %v", err)

0 commit comments

Comments
 (0)