Update start stop api to use pod status function.

Update the strat and stop api to validate pod status based on status functions
rather than iterating over all the containers in the pod. (Addressing the TO-DO)

Signed-off-by: Sujil02 <sushah@redhat.com>
This commit is contained in:
Sujil02 2020-02-28 17:01:10 -05:00
parent a83a94b095
commit 846ed00684
1 changed files with 4 additions and 35 deletions

View File

@ -172,7 +172,6 @@ func PodStop(w http.ResponseWriter, r *http.Request) {
errors.Wrapf(err, "Failed to parse parameters for %s", r.URL.String()))
return
}
allContainersStopped := true
name := utils.GetName(r)
pod, err := runtime.LookupPod(name)
if err != nil {
@ -180,26 +179,12 @@ func PodStop(w http.ResponseWriter, r *http.Request) {
return
}
// TODO we need to implement a pod.State/Status in libpod internal so libpod api
// users don't have to run through all containers.
podContainers, err := pod.AllContainers()
status, err := pod.GetPodStatus()
if err != nil {
utils.Error(w, "Something went wrong", http.StatusInternalServerError, err)
return
}
for _, con := range podContainers {
containerState, err := con.State()
if err != nil {
utils.Error(w, "Something went wrong", http.StatusInternalServerError, err)
return
}
if containerState == define.ContainerStateRunning {
allContainersStopped = false
break
}
}
if allContainersStopped {
if status != define.PodStateRunning {
utils.WriteResponse(w, http.StatusNotModified, "")
return
}
@ -218,34 +203,18 @@ func PodStop(w http.ResponseWriter, r *http.Request) {
func PodStart(w http.ResponseWriter, r *http.Request) {
runtime := r.Context().Value("runtime").(*libpod.Runtime)
allContainersRunning := true
name := utils.GetName(r)
pod, err := runtime.LookupPod(name)
if err != nil {
utils.PodNotFound(w, name, err)
return
}
// TODO we need to implement a pod.State/Status in libpod internal so libpod api
// users don't have to run through all containers.
podContainers, err := pod.AllContainers()
status, err := pod.GetPodStatus()
if err != nil {
utils.Error(w, "Something went wrong", http.StatusInternalServerError, err)
return
}
for _, con := range podContainers {
containerState, err := con.State()
if err != nil {
utils.Error(w, "Something went wrong", http.StatusInternalServerError, err)
return
}
if containerState != define.ContainerStateRunning {
allContainersRunning = false
break
}
}
if allContainersRunning {
if status == define.PodStateRunning {
utils.WriteResponse(w, http.StatusNotModified, "")
return
}