Add {{.Restarts}} to podman ps
Add Restarts column to the podman ps output to show how many times a
container was restarted based on its restart policy. This column will be
displayed when --format={{.Restarts}}.
Signed-off-by: Urvashi Mohnani <umohnani@redhat.com>
This commit is contained in:
parent
edbeee5238
commit
0fef113a4b
|
|
@ -4,6 +4,7 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
|
|
@ -300,6 +301,7 @@ func createPsOut() ([]map[string]string, string) {
|
|||
"PIDNS": "pidns",
|
||||
"Pod": "pod id",
|
||||
"PodName": "podname", // undo camelcase space break
|
||||
"Restarts": "restarts",
|
||||
"RunningFor": "running for",
|
||||
"UTS": "uts",
|
||||
"User": "userns",
|
||||
|
|
@ -377,6 +379,10 @@ func (l psReporter) Status() string {
|
|||
return state
|
||||
}
|
||||
|
||||
func (l psReporter) Restarts() string {
|
||||
return strconv.Itoa(int(l.ListContainer.Restarts))
|
||||
}
|
||||
|
||||
func (l psReporter) RunningFor() string {
|
||||
return l.CreatedHuman()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -89,6 +89,7 @@ Valid placeholders for the Go template are listed below:
|
|||
| .Pod | Pod the container is associated with (SHA) |
|
||||
| .PodName | Seems to be empty no matter what |
|
||||
| .Ports | Exposed ports |
|
||||
| .Restarts | Display the container restart count |
|
||||
| .RunningFor | Time elapsed since container was started |
|
||||
| .Size | Size of container |
|
||||
| .StartedAt | Time (epoch seconds) the container started |
|
||||
|
|
|
|||
|
|
@ -203,7 +203,6 @@ type ContainerState struct {
|
|||
// restart policy. This is NOT incremented by normal container restarts
|
||||
// (only by restart policy).
|
||||
RestartCount uint `json:"restartCount,omitempty"`
|
||||
|
||||
// StartupHCPassed indicates that the startup healthcheck has
|
||||
// succeeded and the main healthcheck can begin.
|
||||
StartupHCPassed bool `json:"startupHCPassed,omitempty"`
|
||||
|
|
@ -730,6 +729,18 @@ func (c *Container) State() (define.ContainerStatus, error) {
|
|||
return c.state.State, nil
|
||||
}
|
||||
|
||||
func (c *Container) RestartCount() (uint, error) {
|
||||
if !c.batched {
|
||||
c.lock.Lock()
|
||||
defer c.lock.Unlock()
|
||||
|
||||
if err := c.syncContainer(); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
return c.state.RestartCount, nil
|
||||
}
|
||||
|
||||
// Mounted returns whether the container is mounted and the path it is mounted
|
||||
// at (if it is mounted).
|
||||
// If the container is not mounted, no error is returned, and the mountpoint
|
||||
|
|
|
|||
|
|
@ -55,6 +55,10 @@ type ListContainer struct {
|
|||
PodName string
|
||||
// Port mappings
|
||||
Ports []types.PortMapping
|
||||
// Restarts is how many times the container was restarted by its
|
||||
// restart policy. This is NOT incremented by normal container restarts
|
||||
// (only by restart policy).
|
||||
Restarts uint
|
||||
// Size of the container rootfs. Requires the size boolean to be true
|
||||
Size *define.ContainerSize
|
||||
// Time when container started
|
||||
|
|
|
|||
|
|
@ -145,6 +145,7 @@ func ListContainerBatch(rt *libpod.Runtime, ctr *libpod.Container, opts entities
|
|||
portMappings []libnetworkTypes.PortMapping
|
||||
networks []string
|
||||
healthStatus string
|
||||
restartCount uint
|
||||
)
|
||||
|
||||
batchErr := ctr.Batch(func(c *libpod.Container) error {
|
||||
|
|
@ -193,6 +194,11 @@ func ListContainerBatch(rt *libpod.Runtime, ctr *libpod.Container, opts entities
|
|||
return err
|
||||
}
|
||||
|
||||
restartCount, err = c.RestartCount()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !opts.Size && !opts.Namespace {
|
||||
return nil
|
||||
}
|
||||
|
|
@ -251,6 +257,7 @@ func ListContainerBatch(rt *libpod.Runtime, ctr *libpod.Container, opts entities
|
|||
StartedAt: startedTime.Unix(),
|
||||
State: conState.String(),
|
||||
Status: healthStatus,
|
||||
Restarts: restartCount,
|
||||
}
|
||||
if opts.Pod && len(conConfig.Pod) > 0 {
|
||||
podName, err := rt.GetPodName(conConfig.Pod)
|
||||
|
|
|
|||
Loading…
Reference in New Issue