func installationComplete(c kclient.PodInterface, name string, out io.Writer) wait.ConditionFunc { return func() (bool, error) { pod, err := c.Get(name) if err != nil { if kapierrors.IsNotFound(err) { return false, fmt.Errorf("installation pod was deleted; unable to determine whether it completed successfully") } return false, nil } switch pod.Status.Phase { case kapi.PodSucceeded: fmt.Fprintf(out, "--> Success\n") if err := c.Delete(name, nil); err != nil { glog.V(4).Infof("Failed to delete install pod %s: %v", name, err) } return true, nil case kapi.PodFailed: return true, fmt.Errorf("installation of %q did not complete successfully", name) default: return false, nil } } }
It("should schedule a pod w/ a RW PD, remove it, then schedule it on another host [Slow]", func() { SkipUnlessProviderIs("gce", "gke", "aws") By("creating PD") diskName, err := createPDWithRetry() expectNoError(err, "Error creating PD") host0Pod := testPDPod([]string{diskName}, host0Name, false /* readOnly */, 1 /* numContainers */) host1Pod := testPDPod([]string{diskName}, host1Name, false /* readOnly */, 1 /* numContainers */) containerName := "mycontainer" defer func() { // Teardown pods, PD. Ignore errors. // Teardown should do nothing unless test failed. By("cleaning up PD-RW test environment") podClient.Delete(host0Pod.Name, api.NewDeleteOptions(0)) podClient.Delete(host1Pod.Name, api.NewDeleteOptions(0)) detachAndDeletePDs(diskName, []string{host0Name, host1Name}) }() By("submitting host0Pod to kubernetes") _, err = podClient.Create(host0Pod) expectNoError(err, fmt.Sprintf("Failed to create host0Pod: %v", err)) expectNoError(framework.WaitForPodRunningSlow(host0Pod.Name)) testFile := "/testpd1/tracker" testFileContents := fmt.Sprintf("%v", mathrand.Int()) expectNoError(framework.WriteFileViaContainer(host0Pod.Name, containerName, testFile, testFileContents)) Logf("Wrote value: %v", testFileContents)
It("should schedule a pod w/ a RW PD, ungracefully remove it, then schedule it on another host [Slow]", func() { framework.SkipUnlessProviderIs("gce", "gke", "aws") By("creating PD") diskName, err := createPDWithRetry() framework.ExpectNoError(err, "Error creating PD") host0Pod := testPDPod([]string{diskName}, host0Name, false /* readOnly */, 1 /* numContainers */) host1Pod := testPDPod([]string{diskName}, host1Name, false /* readOnly */, 1 /* numContainers */) containerName := "mycontainer" defer func() { // Teardown pods, PD. Ignore errors. // Teardown should do nothing unless test failed. By("cleaning up PD-RW test environment") podClient.Delete(host0Pod.Name, api.NewDeleteOptions(0)) podClient.Delete(host1Pod.Name, api.NewDeleteOptions(0)) detachAndDeletePDs(diskName, []string{host0Name, host1Name}) }() By("submitting host0Pod to kubernetes") _, err = podClient.Create(host0Pod) framework.ExpectNoError(err, fmt.Sprintf("Failed to create host0Pod: %v", err)) framework.ExpectNoError(f.WaitForPodRunningSlow(host0Pod.Name)) testFile := "/testpd1/tracker" testFileContents := fmt.Sprintf("%v", mathrand.Int()) framework.ExpectNoError(f.WriteFileViaContainer(host0Pod.Name, containerName, testFile, testFileContents)) framework.Logf("Wrote value: %v", testFileContents)
It("should schedule a pod w/ a RW PD, remove it, then schedule it on another host", func() { SkipUnlessProviderIs("gce", "gke", "aws") By("creating PD") diskName, err := createPD() expectNoError(err, "Error creating PD") host0Pod := testPDPod(diskName, host0Name, false /* readOnly */, 1 /* numContainers */) host1Pod := testPDPod(diskName, host1Name, false /* readOnly */, 1 /* numContainers */) defer func() { By("cleaning up PD-RW test environment") // Teardown pods, PD. Ignore errors. // Teardown should do nothing unless test failed. podClient.Delete(host0Pod.Name, nil) podClient.Delete(host1Pod.Name, nil) detachPD(host0Name, diskName) detachPD(host1Name, diskName) deletePD(diskName) }() By("submitting host0Pod to kubernetes") _, err = podClient.Create(host0Pod) expectNoError(err, fmt.Sprintf("Failed to create host0Pod: %v", err)) expectNoError(framework.WaitForPodRunning(host0Pod.Name)) testFile := "/testpd/tracker" testFileContents := fmt.Sprintf("%v", math_rand.Int())