cmd/headscale/cli: add printListOutput to centralise table-vs-JSON branching

Add a helper that checks the --output flag and either serialises as
JSON/YAML or invokes a table-rendering callback. This removes the
repeated format,_ := cmd.Flags().GetString("output") + if-branch from
the five list commands.
This commit is contained in:
Kristoffer Dalby
2026-02-18 14:30:07 +00:00
parent 8891ec9835
commit d6c39e65a5
5 changed files with 102 additions and 139 deletions

View File

@@ -48,44 +48,33 @@ var listAPIKeys = &cobra.Command{
Short: "List the Api keys for headscale",
Aliases: []string{"ls", "show"},
RunE: grpcRunE(func(ctx context.Context, client v1.HeadscaleServiceClient, cmd *cobra.Command, args []string) error {
format, _ := cmd.Flags().GetString("output")
request := &v1.ListApiKeysRequest{}
response, err := client.ListApiKeys(ctx, request)
response, err := client.ListApiKeys(ctx, &v1.ListApiKeysRequest{})
if err != nil {
return fmt.Errorf("listing api keys: %w", err)
}
if format != "" {
return printOutput(cmd, response.GetApiKeys(), "")
}
tableData := pterm.TableData{
{"ID", "Prefix", "Expiration", "Created"},
}
for _, key := range response.GetApiKeys() {
expiration := "-"
if key.GetExpiration() != nil {
expiration = ColourTime(key.GetExpiration().AsTime())
return printListOutput(cmd, response.GetApiKeys(), func() error {
tableData := pterm.TableData{
{"ID", "Prefix", "Expiration", "Created"},
}
tableData = append(tableData, []string{
strconv.FormatUint(key.GetId(), util.Base10),
key.GetPrefix(),
expiration,
key.GetCreatedAt().AsTime().Format(HeadscaleDateTimeFormat),
})
}
for _, key := range response.GetApiKeys() {
expiration := "-"
err = pterm.DefaultTable.WithHasHeader().WithData(tableData).Render()
if err != nil {
return fmt.Errorf("rendering table: %w", err)
}
if key.GetExpiration() != nil {
expiration = ColourTime(key.GetExpiration().AsTime())
}
return nil
tableData = append(tableData, []string{
strconv.FormatUint(key.GetId(), util.Base10),
key.GetPrefix(),
expiration,
key.GetCreatedAt().AsTime().Format(HeadscaleDateTimeFormat),
})
}
return pterm.DefaultTable.WithHasHeader().WithData(tableData).Render()
})
}),
}