talm

Форк
0
/
imported_containers.go 
129 строк · 3.4 Кб
1
// Code generated by go run tools/import_commands.go --talos-version v1.7.1 containers
2
// DO NOT EDIT.
3

4
// This Source Code Form is subject to the terms of the Mozilla Public
5
// License, v. 2.0. If a copy of the MPL was not distributed with this
6
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
7

8
package commands
9

10
import (
11
	"context"
12
	"fmt"
13
	"os"
14
	"sort"
15
	"strings"
16
	"text/tabwriter"
17

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"
22

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"
28
)
29

30
// containersCmd represents the processes command.
31
var containersCmd = &cobra.Command{
32
	Use:     "containers",
33
	Aliases: []string{"c"},
34
	Short:   "List containers",
35
	Long:    ``,
36
	Args:    cobra.NoArgs,
37
	RunE: func(cmd *cobra.Command, args []string) error {
38
		return WithClient(func(ctx context.Context, c *client.Client) error {
39
			var (
40
				namespace string
41
				driver    common.ContainerDriver
42
			)
43

44
			if kubernetesFlag {
45
				namespace = criconstants.K8sContainerdNamespace
46
				driver = common.ContainerDriver_CRI
47
			} else {
48
				namespace = constants.SystemContainerdNamespace
49
				driver = common.ContainerDriver_CONTAINERD
50
			}
51

52
			var remotePeer peer.Peer
53

54
			resp, err := c.Containers(ctx, namespace, driver, grpc.Peer(&remotePeer))
55
			if err != nil {
56
				if resp == nil {
57
					return fmt.Errorf("error getting container list: %s", err)
58
				}
59

60
				cli.Warning("%s", err)
61
			}
62

63
			return containerRender(&remotePeer, resp)
64
		})
65
	},
66
}
67

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")
71

72
	defaultNode := client.AddrFromPeer(remotePeer)
73

74
	for _, msg := range resp.Messages {
75
		sort.Slice(msg.Containers,
76
			func(i, j int) bool {
77
				return strings.Compare(msg.Containers[i].Id, msg.Containers[j].Id) < 0
78
			})
79

80
		for _, p := range msg.Containers {
81
			display := p.Id
82
			if p.Id != p.PodId {
83
				// container in a sandbox
84
				display = "└─ " + display
85
			}
86

87
			node := defaultNode
88

89
			if msg.Metadata != nil {
90
				node = msg.Metadata.Hostname
91
			}
92

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)
94
		}
95
	}
96

97
	return w.Flush()
98
}
99

100
func init() {
101
	containersCmd.Flags().StringSliceVarP(&containersCmdFlags.configFiles,
102
		"file", "f", nil, "specify config files or patches in a YAML file (can specify multiple)",
103
	)
104
	containersCmd.PreRunE = func(cmd *cobra.Command, args []string) error {
105
		nodesFromArgs := len(GlobalArgs.
106
			Nodes) > 0
107

108
		endpointsFromArgs := len(GlobalArgs.Endpoints) > 0
109
		for _, configFile := range containersCmdFlags.
110
			configFiles {
111
			if err := processModelineAndUpdateGlobals(configFile, nodesFromArgs, endpointsFromArgs,
112
				false); err != nil {
113
				return err
114
			}
115
		}
116
		return nil
117
	}
118

119
	containersCmd.Flags().BoolVarP(&kubernetesFlag, "kubernetes", "k", false, "use the k8s.io containerd namespace")
120

121
	containersCmd.Flags().BoolP("use-cri", "c", false, "use the CRI driver")
122
	containersCmd.Flags().MarkHidden("use-cri") //nolint:errcheck
123

124
	addCommand(containersCmd)
125
}
126

127
var containersCmdFlags struct {
128
	configFiles []string
129
}
130

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.