// waitForNPods tries to list pods using c until it finds expect of them, // returning their names if it can do so before timeout. func waitForNPods(ps *framework.PodStore, expect int, timeout time.Duration) ([]string, error) { // Loop until we find expect pods or timeout is passed. var pods []*api.Pod var errLast error found := wait.Poll(framework.Poll, timeout, func() (bool, error) { allPods := ps.List() pods := filterIrrelevantPods(allPods) if len(pods) != expect { errLast = fmt.Errorf("expected to find %d pods but found only %d", expect, len(pods)) framework.Logf("Error getting pods: %v", errLast) return false, nil } return true, nil }) == nil // Extract the names of all found pods. podNames := make([]string, len(pods)) for i, p := range pods { podNames[i] = p.ObjectMeta.Name } if !found { return podNames, fmt.Errorf("couldn't find %d pods within %v; last error: %v", expect, timeout, errLast) } return podNames, nil }
// How often to framework.Poll the statues of a restart. restartPoll = 20 * time.Second // How long a node is allowed to become "Ready" after it is restarted before // the test is considered failed. restartNodeReadyAgainTimeout = 5 * time.Minute // How long a pod is allowed to become "running" and "ready" after a node // restart before test is considered failed. restartPodReadyAgainTimeout = 5 * time.Minute ) var _ = framework.KubeDescribe("Restart [Disruptive]", func() { f := framework.NewDefaultFramework("restart") var ps *framework.PodStore BeforeEach(func() { // This test requires the ability to restart all nodes, so the provider // check must be identical to that call. framework.SkipUnlessProviderIs("gce", "gke") ps = framework.NewPodStore(f.Client, api.NamespaceSystem, labels.Everything(), fields.Everything()) }) AfterEach(func() { if ps != nil { ps.Stop() } })
for _, p := range pods { if isRestartNeverMirrorPod(p) { // Mirror pods with restart policy == Never will not get // recreated if they are deleted after the pods have // terminated. For now, we discount such pods. // https://github.com/kubernetes/kubernetes/issues/34003 continue } results = append(results, p) } return results } var _ = framework.KubeDescribe("Restart [Disruptive]", func() { f := framework.NewDefaultFramework("restart") var ps *framework.PodStore BeforeEach(func() { // This test requires the ability to restart all nodes, so the provider // check must be identical to that call. framework.SkipUnlessProviderIs("gce", "gke") ps = framework.NewPodStore(f.Client, api.NamespaceSystem, labels.Everything(), fields.Everything()) }) AfterEach(func() { if ps != nil { ps.Stop() } })