diff --git a/libcontainer/container.go b/libcontainer/container.go index b07ac53b..68291231 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 aaa7ee51..284e15ec 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 f5973836..9a282cf5 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 96fa67e7..484d2bce 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 baffef18..c6a8fde7 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")