From 1172a1e1e5c1d75d16704729abc63d161e4aaf35 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Thu, 28 Jan 2016 13:32:24 -0800 Subject: [PATCH] Update list command and created methods We don't need a CreatedTime method on the container because it's not part of the interface and can be received via the state. We also do not need to call it CreateTime because the type of this field is time.Time so we know its time. Signed-off-by: Michael Crosby --- libcontainer/container.go | 4 +-- libcontainer/container_linux.go | 11 ++------ libcontainer/factory_linux.go | 2 +- list.go | 50 +++++++++++++-------------------- utils.go | 11 -------- 5 files changed, 25 insertions(+), 53 deletions(-) diff --git a/libcontainer/container.go b/libcontainer/container.go index b07ac53b1..68291231e 100644 --- a/libcontainer/container.go +++ b/libcontainer/container.go @@ -65,8 +65,8 @@ type BaseState struct { // InitProcessStartTime is the init process start time in clock cycles since boot time. InitProcessStartTime string `json:"init_process_start"` - // CreatedTime is the unix timestamp for the creation time of the container in UTC - CreatedTime time.Time `json:"created_time"` + // Created is the unix timestamp for the creation time of the container in UTC + Created time.Time `json:"created"` // Config is the container's configuration. Config configs.Config `json:"config"` diff --git a/libcontainer/container_linux.go b/libcontainer/container_linux.go index aaa7ee51b..284e15ec3 100644 --- a/libcontainer/container_linux.go +++ b/libcontainer/container_linux.go @@ -40,7 +40,7 @@ type linuxContainer struct { m sync.Mutex criuVersion int state containerState - createdTime time.Time + created time.Time } // State represents a running container's state @@ -120,11 +120,6 @@ func (c *linuxContainer) ID() string { return c.id } -// CreatedTime returns the timestamp from when the container was CREATED -func (c *linuxContainer) CreatedTime() time.Time { - return c.createdTime -} - // Config returns the container's configuration func (c *linuxContainer) Config() configs.Config { return *c.config @@ -198,7 +193,7 @@ func (c *linuxContainer) Start(process *Process) error { return newSystemError(err) } // generate a timestamp indicating when the container was started - c.createdTime = time.Now().UTC() + c.created = time.Now().UTC() c.state = &runningState{ c: c, @@ -1053,7 +1048,7 @@ func (c *linuxContainer) currentState() (*State, error) { Config: *c.config, InitProcessPid: pid, InitProcessStartTime: startTime, - CreatedTime: c.createdTime, + Created: c.created, }, CgroupPaths: c.cgroupManager.GetPaths(), NamespacePaths: make(map[configs.NamespaceType]string), diff --git a/libcontainer/factory_linux.go b/libcontainer/factory_linux.go index f5973836c..9a282cf5a 100644 --- a/libcontainer/factory_linux.go +++ b/libcontainer/factory_linux.go @@ -202,7 +202,7 @@ func (l *LinuxFactory) Load(id string) (Container, error) { criuPath: l.CriuPath, cgroupManager: l.NewCgroupsManager(state.Config.Cgroups, state.CgroupPaths), root: containerRoot, - createdTime: state.CreatedTime, + created: state.Created, } c.state = &createdState{c: c, s: Created} if err := c.refreshState(); err != nil { diff --git a/list.go b/list.go index 96fa67e79..484d2bce8 100644 --- a/list.go +++ b/list.go @@ -12,72 +12,60 @@ import ( "github.com/Sirupsen/logrus" "github.com/codegangsta/cli" + "github.com/opencontainers/runc/libcontainer" ) var listCommand = cli.Command{ Name: "list", Usage: "lists containers started by runc with the given root", Action: func(context *cli.Context) { - - // preload the container factory - if factory == nil { - err := factoryPreload(context) - if err != nil { - logrus.Fatal(err) - return - } + factory, err := loadFactory(context) + if err != nil { + logrus.Fatal(err) } - // get the list of containers root := context.GlobalString("root") absRoot, err := filepath.Abs(root) if err != nil { logrus.Fatal(err) - return } list, err := ioutil.ReadDir(absRoot) - + if err != nil { + logrus.Fatal(err) + } w := tabwriter.NewWriter(os.Stdout, 12, 1, 3, ' ', 0) fmt.Fprint(w, "ID\tPID\tSTATUS\tCREATED\n") - // output containers for _, item := range list { - switch { - case !item.IsDir(): - // do nothing with misc files in the containers directory - case item.IsDir(): - outputListInfo(item.Name(), w) + if item.IsDir() { + if err := outputListInfo(item.Name(), factory, w); err != nil { + logrus.Fatal(err) + } } } - if err := w.Flush(); err != nil { logrus.Fatal(err) } }, } -func outputListInfo(id string, w *tabwriter.Writer) { +func outputListInfo(id string, factory libcontainer.Factory, w *tabwriter.Writer) error { container, err := factory.Load(id) if err != nil { - logrus.Fatal(err) - return + return err } - containerStatus, err := container.Status() if err != nil { - logrus.Fatal(err) - return + return err } - state, err := container.State() if err != nil { - logrus.Fatal(err) - return + return err } - - fmt.Fprintf(w, "%s\t%d\t%s\t%s\n", container.ID(), + fmt.Fprintf(w, "%s\t%d\t%s\t%s\n", + container.ID(), state.BaseState.InitProcessPid, containerStatus.String(), - state.BaseState.CreatedTime.Format(time.RFC3339Nano)) - + state.BaseState.Created.Format(time.RFC3339Nano)) + return nil } diff --git a/utils.go b/utils.go index baffef181..c6a8fde79 100644 --- a/utils.go +++ b/utils.go @@ -86,17 +86,6 @@ func containerPreload(context *cli.Context) error { return nil } -var factory libcontainer.Factory - -func factoryPreload(context *cli.Context) error { - f, err := loadFactory(context) - if err != nil { - return err - } - factory = f - return nil -} - // loadFactory returns the configured factory instance for execing containers. func loadFactory(context *cli.Context) (libcontainer.Factory, error) { root := context.GlobalString("root")