18
criconstants "github.com/containerd/containerd/pkg/cri/constants"
19
"github.com/spf13/cobra"
20
"google.golang.org/grpc"
21
"google.golang.org/grpc/peer"
23
"github.com/siderolabs/talos/pkg/cli"
24
"github.com/siderolabs/talos/pkg/machinery/api/common"
25
machineapi "github.com/siderolabs/talos/pkg/machinery/api/machine"
26
"github.com/siderolabs/talos/pkg/machinery/client"
27
"github.com/siderolabs/talos/pkg/machinery/constants"
31
var containersCmd = &cobra.Command{
33
Aliases: []string{"c"},
34
Short: "List containers",
37
RunE: func(cmd *cobra.Command, args []string) error {
38
return WithClient(func(ctx context.Context, c *client.Client) error {
41
driver common.ContainerDriver
45
namespace = criconstants.K8sContainerdNamespace
46
driver = common.ContainerDriver_CRI
48
namespace = constants.SystemContainerdNamespace
49
driver = common.ContainerDriver_CONTAINERD
52
var remotePeer peer.Peer
54
resp, err := c.Containers(ctx, namespace, driver, grpc.Peer(&remotePeer))
57
return fmt.Errorf("error getting container list: %s", err)
60
cli.Warning("%s", err)
63
return containerRender(&remotePeer, resp)
68
func containerRender(remotePeer *peer.Peer, resp *machineapi.ContainersResponse) error {
69
w := tabwriter.NewWriter(os.Stdout, 0, 0, 3, ' ', 0)
70
fmt.Fprintln(w, "NODE\tNAMESPACE\tID\tIMAGE\tPID\tSTATUS")
72
defaultNode := client.AddrFromPeer(remotePeer)
74
for _, msg := range resp.Messages {
75
sort.Slice(msg.Containers,
77
return strings.Compare(msg.Containers[i].Id, msg.Containers[j].Id) < 0
80
for _, p := range msg.Containers {
84
display = "└─ " + display
89
if msg.Metadata != nil {
90
node = msg.Metadata.Hostname
93
fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%d\t%s\n", node, p.Namespace, display, p.Image, p.Pid, p.Status)
101
containersCmd.Flags().StringSliceVarP(&containersCmdFlags.configFiles,
102
"file", "f", nil, "specify config files or patches in a YAML file (can specify multiple)",
104
containersCmd.PreRunE = func(cmd *cobra.Command, args []string) error {
105
nodesFromArgs := len(GlobalArgs.
108
endpointsFromArgs := len(GlobalArgs.Endpoints) > 0
109
for _, configFile := range containersCmdFlags.
111
if err := processModelineAndUpdateGlobals(configFile, nodesFromArgs, endpointsFromArgs,
119
containersCmd.Flags().BoolVarP(&kubernetesFlag, "kubernetes", "k", false, "use the k8s.io containerd namespace")
121
containersCmd.Flags().BoolP("use-cri", "c", false, "use the CRI driver")
122
containersCmd.Flags().MarkHidden("use-cri")
124
addCommand(containersCmd)
127
var containersCmdFlags struct {