1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
package context
import (
"github.com/spf13/cobra"
"github.com/hetznercloud/cli/internal/cmd/output"
"github.com/hetznercloud/cli/internal/cmd/util"
"github.com/hetznercloud/cli/internal/state"
)
var listTableOutput *output.Table
type ContextPresentation struct {
Name string
Token string
Active string
}
func init() {
listTableOutput = output.NewTable().
AddAllowedFields(ContextPresentation{}).
RemoveAllowedField("token")
}
func newListCommand(cli *state.State) *cobra.Command {
cmd := &cobra.Command{
Use: "list [FLAGS]",
Short: "List contexts",
Long: util.ListLongDescription(
"Displays a list of contexts.",
listTableOutput.Columns(),
),
Args: cobra.NoArgs,
TraverseChildren: true,
DisableFlagsInUseLine: true,
RunE: cli.Wrap(runList),
}
output.AddFlag(cmd, output.OptionNoHeader(), output.OptionColumns(listTableOutput.Columns()))
return cmd
}
func runList(cli *state.State, cmd *cobra.Command, args []string) error {
outOpts := output.FlagsForCommand(cmd)
cols := []string{"active", "name"}
if outOpts.IsSet("columns") {
cols = outOpts["columns"]
}
tw := listTableOutput
if err := tw.ValidateColumns(cols); err != nil {
return err
}
if !outOpts.IsSet("noheader") {
tw.WriteHeader(cols)
}
for _, context := range cli.Config.Contexts {
presentation := ContextPresentation{
Name: context.Name,
Token: context.Token,
Active: " ",
}
if cli.Config.ActiveContext != nil && cli.Config.ActiveContext.Name == context.Name {
presentation.Active = "*"
}
tw.Write(cols, presentation)
}
tw.Flush()
return nil
}
|