Ctrl K
ComunidadGuías…

cli/sync_list.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package cli

import (
	"fmt"

	"golang.org/x/xerrors"

	"github.com/coder/coder/v2/agent/agentsocket"
	"github.com/coder/coder/v2/cli/cliui"
	"github.com/coder/serpent"
)

func (*RootCmd) syncList(socketPath *string) *serpent.Command {
	formatter := cliui.NewOutputFormatter(
		cliui.TableFormat(
			[]agentsocket.SyncListItem{},
			[]string{
				"unit",
				"status",
				"ready",
			},
		),
		cliui.JSONFormat(),
	)

	cmd := &serpent.Command{
		Use:   "list",
		Short: "List all registered units and their statuses",
		Long:  "List all units currently registered with the workspace agent. Shows each unit's name, status, and whether it is ready to start.",
		Handler: func(i *serpent.Invocation) error {
			ctx := i.Context()

			opts := []agentsocket.Option{}
			if *socketPath != "" {
				opts = append(opts, agentsocket.WithPath(*socketPath))
			}

			client, err := agentsocket.NewClient(ctx, opts...)
			if err != nil {
				return xerrors.Errorf("connect to agent socket: %w", err)
			}
			defer client.Close()

			items, err := client.SyncList(ctx)
			if err != nil {
				return xerrors.Errorf("list units failed: %w", err)
			}

			if len(items) == 0 && formatter.FormatID() == "table" {
				cliui.Info(i.Stdout, "No units registered")
				return nil
			}

			out, err := formatter.Format(ctx, items)
			if err != nil {
				return xerrors.Errorf("format output: %w", err)
			}

			_, _ = fmt.Fprintln(i.Stdout, out)

			return nil
		},
	}

	formatter.AttachOptions(&cmd.Options)
	return cmd
}