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

Migrate to cobra #86

Merged
merged 10 commits into from
Aug 10, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Improve url command
  • Loading branch information
cmoog committed Aug 7, 2020
commit ba922950eac107460313ee92d0618d3025f49f55
15 changes: 5 additions & 10 deletions cmd/coder/secrets.go
Original file line number Diff line number Diff line change
Expand Up @@ -143,17 +143,12 @@ func listSecrets(_ *cli.Context) {
return
}

w := xtabwriter.NewWriter()
_, err = fmt.Fprintln(w, xtabwriter.StructFieldNames(secrets[0]))
requireSuccess(err, "failed to write: %v", err)
for _, s := range secrets {
err = xtabwriter.WriteTable(len(secrets), func(i int) interface{} {
s := secrets[i]
s.Value = "******" // value is omitted from bulk responses

_, err = fmt.Fprintln(w, xtabwriter.StructValues(s))
requireSuccess(err, "failed to write: %v", err)
}
err = w.Flush()
requireSuccess(err, "failed to flush writer: %v", err)
return s
})
requireSuccess(err, "failed to write table of secrets: %w", err)
}

func viewSecret(c *cli.Context) {
Expand Down
54 changes: 29 additions & 25 deletions cmd/coder/urls.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import (
"regexp"
"strconv"
"strings"
"text/tabwriter"

"cdr.dev/coder-cli/internal/x/xtabwriter"
"github.com/urfave/cli"
"golang.org/x/xerrors"

Expand All @@ -19,20 +19,22 @@ import (
func makeURLCmd() cli.Command {
var outputFmt string
return cli.Command{
Name: "urls",
Usage: "Interact with environment DevURLs",
ArgsUsage: "",
Before: nil,
After: nil,
OnUsageError: nil,
Name: "urls",
Usage: "Interact with environment DevURLs",
Action: exitHelp,
Subcommands: []cli.Command{
makeCreateDevURL(),
{
Name: "ls",
Usage: "List all DevURLs for an environment",
ArgsUsage: "[env_name]",
Before: nil,
Action: makeListDevURLs(&outputFmt),
Before: func(c *cli.Context) error {
if !(outputFmt == "json" || outputFmt == "human") {
return xerrors.Errorf("unknown --output value %q")
}
return nil
},
Action: makeListDevURLs(&outputFmt),
Flags: []cli.Flag{
cli.StringFlag{
Name: "output",
Expand All @@ -45,22 +47,30 @@ func makeURLCmd() cli.Command {
{
Name: "rm",
Usage: "Remove a dev url",
ArgsUsage: "",
Before: nil,
Action: removeDevURL,
Flags: nil,
ArgsUsage: "[env_name] [port]",
Before: func(c *cli.Context) error {
var (
envName = c.Args().First()
port = c.Args().Get(1)
)
if envName == "" || port == "" {
return xerrors.Errorf("[env_name] and [port] are required arguments")
}
return nil
},
Action: removeDevURL,
},
},
}
}

// DevURL is the parsed json response record for a devURL from cemanager
type DevURL struct {
ID string `json:"id"`
ID string `json:"id" tab:"-"`
URL string `json:"url"`
Port int `json:"port"`
Name string `json:"name" tab:"-"`
Access string `json:"access"`
Name string `json:"name"`
}

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

if len(devURLs) == 0 {
return
}

switch *outputFmt {
case "human":
w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', tabwriter.TabIndent)
for _, devURL := range devURLs {
fmt.Fprintf(w, "%s\t%d\t%s\n", devURL.URL, devURL.Port, devURL.Access)
}
err := w.Flush()
requireSuccess(err, "failed to flush writer: %v", err)
err := xtabwriter.WriteTable(len(devURLs), func(i int) interface{} {
return devURLs[i]
})
requireSuccess(err, "failed to write table: %v", err)
case "json":
err := json.NewEncoder(os.Stdout).Encode(devURLs)
requireSuccess(err, "failed to encode devurls to json: %v", err)
Expand Down