Merge pull request #522 from crosbymichael/created
Update list command and created methods
This commit is contained in:
commit
11a238b891
|
@ -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"`
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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 {
|
||||
|
|
46
list.go
46
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)
|
||||
factory, err := loadFactory(context)
|
||||
if err != nil {
|
||||
logrus.Fatal(err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 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
|
||||
}
|
||||
|
|
11
utils.go
11
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")
|
||||
|
|
Loading…
Reference in New Issue