Moved getPodStatus to pod API to be used in varlink
Signed-off-by: haircommander <pehunt@redhat.com> Closes: #1275 Approved by: mheon
This commit is contained in:
parent
37e3f47ef3
commit
67f79eaf73
|
|
@ -296,7 +296,7 @@ func generatePodFilterFuncs(filter, filterValue string, runtime *libpod.Runtime)
|
||||||
return nil, errors.Errorf("%s is not a valid status", filterValue)
|
return nil, errors.Errorf("%s is not a valid status", filterValue)
|
||||||
}
|
}
|
||||||
return func(p *libpod.Pod) bool {
|
return func(p *libpod.Pod) bool {
|
||||||
ctr_statuses, err := p.Status()
|
ctr_statuses, err := p.ContainerStatus()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
@ -324,7 +324,7 @@ func generatePodFilterFuncs(filter, filterValue string, runtime *libpod.Runtime)
|
||||||
return nil, errors.Errorf("%s is not a valid pod status", filterValue)
|
return nil, errors.Errorf("%s is not a valid pod status", filterValue)
|
||||||
}
|
}
|
||||||
return func(p *libpod.Pod) bool {
|
return func(p *libpod.Pod) bool {
|
||||||
status, err := getPodStatus(p)
|
status, err := p.Status()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
@ -460,52 +460,6 @@ func getPodTemplateOutput(psParams []podPsJSONParams, opts podPsOptions) ([]podP
|
||||||
return psOutput, nil
|
return psOutput, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getPodStatus(pod *libpod.Pod) (string, error) {
|
|
||||||
ctr_statuses, err := pod.Status()
|
|
||||||
if err != nil {
|
|
||||||
return ERROR, err
|
|
||||||
}
|
|
||||||
ctrNum := len(ctr_statuses)
|
|
||||||
if ctrNum == 0 {
|
|
||||||
return CREATED, nil
|
|
||||||
}
|
|
||||||
statuses := map[string]int{
|
|
||||||
STOPPED: 0,
|
|
||||||
RUNNING: 0,
|
|
||||||
PAUSED: 0,
|
|
||||||
CREATED: 0,
|
|
||||||
ERROR: 0,
|
|
||||||
}
|
|
||||||
for _, ctr_status := range ctr_statuses {
|
|
||||||
switch ctr_status {
|
|
||||||
case libpod.ContainerStateStopped:
|
|
||||||
statuses[STOPPED]++
|
|
||||||
case libpod.ContainerStateRunning:
|
|
||||||
statuses[RUNNING]++
|
|
||||||
case libpod.ContainerStatePaused:
|
|
||||||
statuses[PAUSED]++
|
|
||||||
case libpod.ContainerStateCreated, libpod.ContainerStateConfigured:
|
|
||||||
statuses[CREATED]++
|
|
||||||
default:
|
|
||||||
statuses[ERROR]++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if statuses[RUNNING] > 0 {
|
|
||||||
return RUNNING, nil
|
|
||||||
} else if statuses[PAUSED] == ctrNum {
|
|
||||||
return PAUSED, nil
|
|
||||||
} else if statuses[STOPPED] == ctrNum {
|
|
||||||
return EXITED, nil
|
|
||||||
} else if statuses[STOPPED] > 0 {
|
|
||||||
return STOPPED, nil
|
|
||||||
} else if statuses[ERROR] > 0 {
|
|
||||||
return ERROR, nil
|
|
||||||
} else {
|
|
||||||
return CREATED, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// getAndSortPodJSONOutput returns the container info in its raw, sorted form
|
// getAndSortPodJSONOutput returns the container info in its raw, sorted form
|
||||||
func getAndSortPodJSONParams(pods []*libpod.Pod, opts podPsOptions, runtime *libpod.Runtime) ([]podPsJSONParams, error) {
|
func getAndSortPodJSONParams(pods []*libpod.Pod, opts podPsOptions, runtime *libpod.Runtime) ([]podPsJSONParams, error) {
|
||||||
var (
|
var (
|
||||||
|
|
@ -519,7 +473,7 @@ func getAndSortPodJSONParams(pods []*libpod.Pod, opts podPsOptions, runtime *lib
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
ctrNum := len(ctrs)
|
ctrNum := len(ctrs)
|
||||||
status, err := getPodStatus(pod)
|
status, err := pod.Status()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,15 @@ import (
|
||||||
"github.com/ulule/deepcopier"
|
"github.com/ulule/deepcopier"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
stopped = "Stopped"
|
||||||
|
running = "Running"
|
||||||
|
paused = "Paused"
|
||||||
|
exited = "Exited"
|
||||||
|
errored = "Error"
|
||||||
|
created = "Created"
|
||||||
|
)
|
||||||
|
|
||||||
// Start starts all containers within a pod
|
// Start starts all containers within a pod
|
||||||
// It combines the effects of Init() and Start() on a container
|
// It combines the effects of Init() and Start() on a container
|
||||||
// If a container has already been initialized it will be started,
|
// If a container has already been initialized it will be started,
|
||||||
|
|
@ -362,9 +371,9 @@ func (p *Pod) Kill(signal uint) (map[string]error, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Status gets the status of all containers in the pod
|
// ContainerStatus gets the status of all containers in the pod
|
||||||
// Returns a map of Container ID to Container Status
|
// Returns a map of Container ID to Container Status
|
||||||
func (p *Pod) Status() (map[string]ContainerStatus, error) {
|
func (p *Pod) ContainerStatus() (map[string]ContainerStatus, error) {
|
||||||
p.lock.Lock()
|
p.lock.Lock()
|
||||||
defer p.lock.Unlock()
|
defer p.lock.Unlock()
|
||||||
|
|
||||||
|
|
@ -396,6 +405,54 @@ func (p *Pod) Status() (map[string]ContainerStatus, error) {
|
||||||
return status, nil
|
return status, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Status determines the status of the pod based on the
|
||||||
|
// statuses of the containers in the pod.
|
||||||
|
// Returns a string representation of the pod status
|
||||||
|
func (p *Pod) Status() (string, error) {
|
||||||
|
ctrStatuses, err := p.ContainerStatus()
|
||||||
|
if err != nil {
|
||||||
|
return errored, err
|
||||||
|
}
|
||||||
|
ctrNum := len(ctrStatuses)
|
||||||
|
if ctrNum == 0 {
|
||||||
|
return created, nil
|
||||||
|
}
|
||||||
|
statuses := map[string]int{
|
||||||
|
stopped: 0,
|
||||||
|
running: 0,
|
||||||
|
paused: 0,
|
||||||
|
created: 0,
|
||||||
|
errored: 0,
|
||||||
|
}
|
||||||
|
for _, ctrStatus := range ctrStatuses {
|
||||||
|
switch ctrStatus {
|
||||||
|
case ContainerStateStopped:
|
||||||
|
statuses[stopped]++
|
||||||
|
case ContainerStateRunning:
|
||||||
|
statuses[running]++
|
||||||
|
case ContainerStatePaused:
|
||||||
|
statuses[paused]++
|
||||||
|
case ContainerStateCreated, ContainerStateConfigured:
|
||||||
|
statuses[created]++
|
||||||
|
default:
|
||||||
|
statuses[errored]++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if statuses[running] > 0 {
|
||||||
|
return running, nil
|
||||||
|
} else if statuses[paused] == ctrNum {
|
||||||
|
return paused, nil
|
||||||
|
} else if statuses[stopped] == ctrNum {
|
||||||
|
return exited, nil
|
||||||
|
} else if statuses[stopped] > 0 {
|
||||||
|
return stopped, nil
|
||||||
|
} else if statuses[errored] > 0 {
|
||||||
|
return errored, nil
|
||||||
|
}
|
||||||
|
return created, nil
|
||||||
|
}
|
||||||
|
|
||||||
// Inspect returns a PodInspect struct to describe the pod
|
// Inspect returns a PodInspect struct to describe the pod
|
||||||
func (p *Pod) Inspect() (*PodInspect, error) {
|
func (p *Pod) Inspect() (*PodInspect, error) {
|
||||||
var (
|
var (
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue