diff options
author | haircommander <pehunt@redhat.com> | 2018-07-11 16:27:52 -0400 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2018-07-12 22:13:52 +0000 |
commit | a2dde5a50d21f8857a57d412a8a1c4c8f731a8d1 (patch) | |
tree | c42c262d2bd9b3fb1f272168f63719386241d74e | |
parent | 4f699db8dad05b770b4e02d3de67137517c3463b (diff) | |
download | podman-a2dde5a50d21f8857a57d412a8a1c4c8f731a8d1.tar.gz podman-a2dde5a50d21f8857a57d412a8a1c4c8f731a8d1.tar.bz2 podman-a2dde5a50d21f8857a57d412a8a1c4c8f731a8d1.zip |
Added created time to pod state
Signed-off-by: haircommander <pehunt@redhat.com>
Closes: #1079
Approved by: rhatdan
-rw-r--r-- | libpod/pod.go | 10 | ||||
-rw-r--r-- | libpod/runtime_pod.go | 36 |
2 files changed, 46 insertions, 0 deletions
diff --git a/libpod/pod.go b/libpod/pod.go index a96628853..fb69787ed 100644 --- a/libpod/pod.go +++ b/libpod/pod.go @@ -4,6 +4,7 @@ import ( "context" "path/filepath" "strings" + "time" "github.com/containers/storage" "github.com/docker/docker/pkg/stringid" @@ -36,6 +37,9 @@ type PodConfig struct { // If true, all containers joined to the pod will use the pod cgroup as // their cgroup parent, and cannot set a different cgroup parent UsePodCgroup bool + + // Time pod was created + CreatedTime time.Time `json:"created"` } // podState represents a pod's state @@ -64,6 +68,11 @@ func (p *Pod) Labels() map[string]string { return labels } +// CreatedTime gets the time when the pod was created +func (p *Pod) CreatedTime() time.Time { + return p.config.CreatedTime +} + // CgroupParent returns the pod's CGroup parent func (p *Pod) CgroupParent() string { return p.config.CgroupParent @@ -92,6 +101,7 @@ func newPod(lockDir string, runtime *Runtime) (*Pod, error) { pod.config = new(PodConfig) pod.config.ID = stringid.GenerateNonCryptoID() pod.config.Labels = make(map[string]string) + pod.config.CreatedTime = time.Now() pod.state = new(podState) pod.runtime = runtime 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 +} |