diff options
Diffstat (limited to 'libpod/runtime_pod.go')
-rw-r--r-- | libpod/runtime_pod.go | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/libpod/runtime_pod.go b/libpod/runtime_pod.go index 34925c2d5..f5a2b017b 100644 --- a/libpod/runtime_pod.go +++ b/libpod/runtime_pod.go @@ -2,6 +2,9 @@ package libpod import ( "context" + "time" + + "github.com/pkg/errors" ) // Contains the public Runtime API for pods @@ -93,3 +96,36 @@ func (r *Runtime) Pods(filters ...PodFilter) ([]*Pod, error) { return podsFiltered, nil } + +// GetAllPods retrieves all pods +func (r *Runtime) GetAllPods() ([]*Pod, error) { + r.lock.RLock() + defer r.lock.RUnlock() + + if !r.valid { + return nil, ErrRuntimeStopped + } + + return r.state.AllPods() +} + +// GetLatestPod returns a pod object of the latest created pod. +func (r *Runtime) GetLatestPod() (*Pod, error) { + lastCreatedIndex := -1 + var lastCreatedTime time.Time + pods, err := r.GetAllPods() + if err != nil { + return nil, errors.Wrapf(err, "unable to get all pods") + } + if len(pods) == 0 { + return nil, ErrNoSuchPod + } + for podIndex, pod := range pods { + createdTime := pod.config.CreatedTime + if createdTime.After(lastCreatedTime) { + lastCreatedTime = createdTime + lastCreatedIndex = podIndex + } + } + return pods[lastCreatedIndex], nil +} |