This is just a temporary storage solution to get containers running on the new code. Signed-off-by: Derek McGowan <derek@mcgstyle.net>
		
			
				
	
	
		
			98 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package main
 | 
						|
 | 
						|
import (
 | 
						|
	gocontext "context"
 | 
						|
	"fmt"
 | 
						|
	"os"
 | 
						|
	"text/tabwriter"
 | 
						|
 | 
						|
	containersapi "github.com/containerd/containerd/api/services/containers"
 | 
						|
	"github.com/containerd/containerd/api/services/execution"
 | 
						|
	tasktypes "github.com/containerd/containerd/api/types/task"
 | 
						|
	"github.com/urfave/cli"
 | 
						|
)
 | 
						|
 | 
						|
var containersCommand = cli.Command{
 | 
						|
	Name: "containers",
 | 
						|
}
 | 
						|
 | 
						|
var listCommand = cli.Command{
 | 
						|
	Name:    "list",
 | 
						|
	Aliases: []string{"ls"},
 | 
						|
	Usage:   "list containers",
 | 
						|
	Flags: []cli.Flag{
 | 
						|
		cli.BoolFlag{
 | 
						|
			Name:  "quiet, q",
 | 
						|
			Usage: "print only the container id",
 | 
						|
		},
 | 
						|
	},
 | 
						|
	Action: func(context *cli.Context) error {
 | 
						|
		quiet := context.Bool("quiet")
 | 
						|
 | 
						|
		tasks, err := getTasksService(context)
 | 
						|
		if err != nil {
 | 
						|
			return err
 | 
						|
		}
 | 
						|
 | 
						|
		containers, err := getContainersService(context)
 | 
						|
		if err != nil {
 | 
						|
			return err
 | 
						|
		}
 | 
						|
 | 
						|
		response, err := containers.List(gocontext.Background(), &containersapi.ListContainersRequest{})
 | 
						|
		if err != nil {
 | 
						|
			return err
 | 
						|
		}
 | 
						|
 | 
						|
		if quiet {
 | 
						|
			for _, c := range response.Containers {
 | 
						|
				fmt.Println(c.ID)
 | 
						|
			}
 | 
						|
		} else {
 | 
						|
 | 
						|
			tasksResponse, err := tasks.List(gocontext.TODO(), &execution.ListRequest{})
 | 
						|
			if err != nil {
 | 
						|
				return err
 | 
						|
			}
 | 
						|
 | 
						|
			// Join with tasks to get status.
 | 
						|
			tasksByContainerID := map[string]*tasktypes.Task{}
 | 
						|
			for _, task := range tasksResponse.Tasks {
 | 
						|
				task.Descriptor()
 | 
						|
				tasksByContainerID[task.ContainerID] = task
 | 
						|
			}
 | 
						|
 | 
						|
			w := tabwriter.NewWriter(os.Stdout, 10, 1, 3, ' ', 0)
 | 
						|
			fmt.Fprintln(w, "ID\tIMAGE\tPID\tSTATUS")
 | 
						|
			for _, c := range response.Containers {
 | 
						|
				var (
 | 
						|
					status string
 | 
						|
					pid    uint32
 | 
						|
				)
 | 
						|
				task, ok := tasksByContainerID[c.ID]
 | 
						|
				if ok {
 | 
						|
					status = task.Status.String()
 | 
						|
					pid = task.Pid
 | 
						|
				} else {
 | 
						|
					status = "STOPPED" // TODO(stevvooe): Is this assumption correct?
 | 
						|
					pid = 0
 | 
						|
				}
 | 
						|
 | 
						|
				if _, err := fmt.Fprintf(w, "%s\t%s\t%d\t%s\n",
 | 
						|
					c.ID,
 | 
						|
					c.Image,
 | 
						|
					pid,
 | 
						|
					status,
 | 
						|
				); err != nil {
 | 
						|
					return err
 | 
						|
				}
 | 
						|
				if err := w.Flush(); err != nil {
 | 
						|
					return err
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		return nil
 | 
						|
	},
 | 
						|
}
 |