package list import ( "context" "encoding/json" "fmt" "edge-infra.dev/pkg/edge/api/graph/model" "edge-infra.dev/pkg/edge/edgecli" "edge-infra.dev/pkg/edge/edgecli/constructors" "edge-infra.dev/pkg/edge/edgecli/flagutil" "edge-infra.dev/pkg/lib/cli/command" "edge-infra.dev/pkg/lib/cli/rags" ) func NewCmd(cfg *edgecli.Config) *command.Command { var cmd *command.Command flagsets := flagutil.GetConnectionFlags(cfg) cmd = &command.Command{ ShortUsage: "edge terminal disk list", ShortHelp: "List all of the disks for a Terminal", Flags: append( flagsets, &rags.Rag{ Name: flagutil.StoreFlag, Value: &rags.String{}, Usage: "Name of the Store - Must be unique", Required: true, }, &rags.Rag{ Name: flagutil.BannerFlag, Value: &rags.String{}, Usage: "Banner name", Required: true, }, &rags.Rag{ Name: flagutil.TerminalID, Value: &rags.String{}, Usage: "ID of Terminal", Required: true, }, ), Exec: func(_ context.Context, _ []string) error { if err := flagutil.ValidateRequiredFlags(cmd.Rags); err != nil { return err } registrar, err := constructors.BuildRegistrar(cmd.Rags) if err != nil { return err } terminalID := flagutil.GetStringFlag(cmd.Rags, flagutil.TerminalID) reqCtx, cancelReq := context.WithTimeout(context.Background(), flagutil.BffReqTimeout) defer cancelReq() terminal, err := registrar.GetTerminal(reqCtx, terminalID) if err != nil { fmt.Println("an error occurred whilst getting the terminal") return err } type DiskListOutput struct { Hostname string `json:"hostname"` Disks []*model.TerminalDisk `json:"disks"` DiscoverDisks string `json:"discoverDisks"` } output := DiskListOutput{ Hostname: terminal.Hostname, Disks: terminal.Disks, DiscoverDisks: terminal.DiscoverDisks.String(), } marshaledOutput, err := json.MarshalIndent(output, "", " ") if err != nil { fmt.Printf("marshaling list output error: %s\n", err) } fmt.Println(string(marshaledOutput)) return nil }, } return cmd }