func podRunningOrUnschedulable(pod *api.Pod) bool { _, cond := api.GetPodCondition(&pod.Status, api.PodScheduled) if cond != nil && cond.Status == api.ConditionFalse && cond.Reason == "Unschedulable" { return true } running, _ := framework.PodRunningReady(pod) return running }
func printStatusAndLogsForNotReadyPods(c *client.Client, ns string, podNames []string, pods []*api.Pod) { printFn := func(id, log string, err error, previous bool) { prefix := "Retrieving log for container" if previous { prefix = "Retrieving log for the last terminated container" } if err != nil { framework.Logf("%s %s, err: %v:\n%s\n", prefix, id, err, log) } else { framework.Logf("%s %s:\n%s\n", prefix, id, log) } } podNameSet := sets.NewString(podNames...) for _, p := range pods { if p.Namespace != ns { continue } if !podNameSet.Has(p.Name) { continue } if ok, _ := framework.PodRunningReady(p); ok { continue } framework.Logf("Status for not ready pod %s/%s: %+v", p.Namespace, p.Name, p.Status) // Print the log of the containers if pod is not running and ready. for _, container := range p.Status.ContainerStatuses { cIdentifer := fmt.Sprintf("%s/%s/%s", p.Namespace, p.Name, container.Name) log, err := framework.GetPodLogs(c, p.Namespace, p.Name, container.Name) printFn(cIdentifer, log, err, false) // Get log from the previous container. if container.RestartCount > 0 { printFn(cIdentifer, log, err, true) } } } }
Expect(wait.Poll(framework.Poll, 240*time.Second, func() (bool, error) { p, err := podClient.Get(p.Name) if err != nil { return false, err } ready := api.IsPodReady(p) if !ready { framework.Logf("pod is not yet ready; pod has phase %q.", p.Status.Phase) return false, nil } return true, nil })).NotTo(HaveOccurred(), "pod never became ready") p, err = podClient.Get(p.Name) framework.ExpectNoError(err) isReady, err := framework.PodRunningReady(p) framework.ExpectNoError(err) Expect(isReady).To(BeTrue(), "pod should be ready") // We assume the pod became ready when the container became ready. This // is true for a single container pod. readyTime, err := getTransitionTimeForReadyCondition(p) framework.ExpectNoError(err) startedTime, err := getContainerStartedTime(p, probTestContainerName) framework.ExpectNoError(err) framework.Logf("Container started at %v, pod became ready at %v", startedTime, readyTime) initialDelay := probTestInitialDelaySeconds * time.Second if readyTime.Sub(startedTime) < initialDelay { framework.Failf("Pod became ready before it's %v initial delay", initialDelay) }